首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

新手求教LINUX下的原子操作该如何写

2012-05-30 
新手求教LINUX下的原子操作该怎么写在WINDOWS下这么写:C/C++ codeconst long tId GetCurrentThreadId()

新手求教LINUX下的原子操作该怎么写
在WINDOWS下这么写:

C/C++ code
        const long tId = GetCurrentThreadId();//获取当前线程ID                  volatile long m_lThreadId;//之前保存的线程ID        if (_InterlockedCompareExchange(&m_lThreadId, tId, 0) == 0)                   {                       //操作                    }



在LINUX下,该怎么实现这个原子操作,让线程一个一个来执行????
//注意,是原子操作,不是内核锁哦

[解决办法]
pthread_mutex_lock 如何?
[解决办法]
内核一般都用gcc的嵌入汇编格式搞成lock前缀的汇编指令了,
用户级的,也可以一样用,但一般的多线程库里面有。

想intel的 tbb 库那些应该也有吧。

我自己用的是boost 库里面的找的一个,他封装成_InterlockedCompareExchange 这样的形式了,在boost的 interprocess的detail里面,他们封装了跨平台的接口了,不过好像好几个boost库里面都有自己的实现。

gcc内部好像也有支持 看看这里http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Atomic-Builtins.html

另外 c++ 11 标准里面也新加有 atomic类型了,但不知道有编译器支持不。 网上有人搞了个 boost atomic的库,但好像还没被收入boost ,也可以参考一下吧。

我觉得要求一般的话,像我那样直接用boost interprocess的detail里面的就好了,但如果你不用boost可能就不是很方便,包装也一下gcc的 build-in 的函数来用也是可以的吧。文档支持很多平台
[解决办法]
看看
/usr/include/c++/4.6.1/atomic
4.6.1这个版本可能有不同。

热点排行