原子操作

原子操作

2008-8-7   version 1.0

 

 

原子操作作用于long等简单类型的简单算术操作;

1        Windows API

WinAPI提供了丰富的原子操作函数,这些函数可以多线程程序或多进程访问的共享内存:

l         InterlockedIncrementInterlockedIncrement64

l         InterlockedDecrementInterlockedDecrement64

l         InterlockedExchangeInterlockedExchange64,用于赋值;

l         InterlockedExchangePointer,用于指针赋值;

l         InterlockedExchangeAddInterlockedExchangeAdd64,相当C的“+=”;

l         InterlockedCompareExchangeInterlockedCompareExchange64,如果Destination等于Comperand,就将Destination赋值为Exchange

l         InterlockedCompareExchangePointer,用于指针;

2        POSIX

没有提供原子操作功能;

3        ACE

ACE5.5中提供了4个原子操作模板类,提供简单的加减和比较操作:

l         ACE_Atomic_Op_Ex< ACE_LOCK, TYPE>,使用锁实现线程安全性;

l         ACE_Atomic_Op< ACE_LOCK, TYPE>,使用上面的ACE_Atomic_Op_Ex实现;

l         ACE_Atomic_Op<ACE_Thread_Mutex, long>Windows下使用InterlockedIncrement()等函数,否则使用自定义函数single_cpu_incrementsingle_cpu_decrementsingle_cpu_exchangesingle_cpu_exchange_addmulti_cpu_incrementmulti_cpu_decrementmulti_cpu_exchangemulti_cpu_exchange_add——这些函数在条件“#if defined (__GNUC__) && (defined (ACE_HAS_PENTIUM) || defined (__amd64__))”成立时,使用一些汇编代码实现;

l         ACE_Atomic_Op<ACE_Thread_Mutex, unsigned long>,与上面类似;

前面两个类的比较操作加锁实现;后两类比较操作没有进行保护——因为更改的原子性,这没有问题;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值