在多线程编程中,为了保证内存的可见性,我们加入了一些锁机制,比如信号量、互斥量、条件变量等,但是锁机制并不是一个简单的机制需要加入很多控制,所以有一些轻量级的同步机制在使用,比如volatile,用来防止多线程中的缓存,禁止指令顺序的调优。同时,还加入了CPU的CAS。Operation,CompareandSwap,比较和交换,在大多数处理器架构中,CAS是判断一块内存上的数据是否为判断值,如果是则进行修改;如果不是,则不执行任何操作并返回当前值。CAS是一种乐观锁。多线程执行时,多个线程修改内存中的数据时,只有一个可以成功修改数据,失败的线程不会被中断或挂起。CAS操作intcompare_and_swap(int*reg,intoldval,intnewval){intold_reg_val=*reg;如果(old_reg_val==oldval)*reg=newval;returnold_reg_val;}具体CAS操作1、GCC的CAS,GCC4。版本1+支持CAS原子操作(请参阅GCCAtomicBuiltins了解完整的原子操作)1)bool__sync_bool_compare_and_swap(type*ptr,typeoldval,typenewval,...)2)type__sync_val_compare_and_swap(type*ptr,typeoldval,typenewval,...)2.C++11中的CAS,C++11中STL中的原子类函数让你可以跨平台。(完整的C++11原子操作,请参考原子操作库)inlineboolatomic_compare_exchange(_Inout_int*_Dest,_Inout_int*_Expected_value,int_Value)restrict(amp);内联boolatomic_compare_exchange(_Inout_unsignedint*_Dest,_Inout_unint*_Expected_value,unsignedint_Value)restrict(amp);关于无锁队列无锁队列是为了解决多线程环境下多线程使用队列的频繁加锁和解锁过程。这些进程消耗了大量的系统资源,CASOperation作为一种轻量级的同步机制,为锁操作带来了极大的便利。节点*节点=新节点();节点->数据=数据;做{old_tail=tail;if(!cas(&tail,old_tail,node))continueif(old_tail)old_tail->next=node;否则cas(&head,NULL,node);休息;}而(1);无锁队列的简单实现,无锁队列更深层次的实现可以类推。它和原来的一样。本质上就是比较多线程运行过程中内存是否发生变化。如果不是,则执行插入操作。.博客参考:http://www.cnblogs.com/catch/...
