原子操作

原子操作

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>,与上面类似;

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

你可能感兴趣的:(thread,多线程,c,windows,汇编,Exchange)