多线程下变量原子操作的几种方法
Note:1.2两个方法主要用于应用中【2种操作的性能是第一种的7-8倍,性能上优于第一种】,第三个方法主要应用于驱动层的。
-
线程锁:如下例子:
pthread_mutex_t count_lock = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock(&count_lock);
global_int++;
pthread_mutex_unlock(&count_lock);2._sync_fetch_and_add系列函数是直接指令集的的函数,由GCC直接支持。他是锁住CPU和RAM之间的数据线来仿止其它的操作的。效率高,但会影响其多线程性能
type __sync_fetch_and_add (type *ptr, type value);
type __sync_fetch_and_sub (type *ptr, type value);
type __sync_fetch_and_or (type *ptr, type value);
type __sync_fetch_and_and (type *ptr, type value);
type __sync_fetch_and_xor (type *ptr, type value);
type __sync_fetch_and_nand (type *ptr, type value);
type __sync_add_and_fetch (type *ptr, type value);
type __sync_sub_and_fetch (type *ptr, type value);
type __sync_or_and_fetch (type *ptr, type value);
type __sync_and_and_fetch (type *ptr, type value);
type __sync_xor_and_fetch (type *ptr, type value);
type __sync_nand_and_fetch (type *ptr, type value);3.linux驱动中的并发控制技术----原子操作,自旋锁,读写自旋锁 ,顺序锁,RCU机制,信号量,完成量,互斥体等方式来实现原子级的操作。