首页 > 试题广场 >

现代的处理器提供了compare-and-swap原子操作:

[问答题]
现代的处理器提供了compare-and-swap原子操作:
int compare_and_swap(int * pv, const int cv, const int nv);
即比较*pv与cv,如果相等,则把*pv值替换为nv并返回*pv原值,否则返回*pv的值。
请利用上述原子操作实现如下操作:
int inc_if_gt_zero(int * pv);
即如果*pv > 0,则把*pv加1并返回修改后的*pv,否则返回*pv。
结果要线程安全且不使用锁、信号灯、互斥量、临界区或类似机制。
int inc_if_gt_zero(int * pv){
    int nv,ov;
    do{
         ov=*pv;
         nv=ov+1;
    }while(ov>0&& compare_and_swap(pv,ov,nv)!=ov);
    if(ov<=0) return ov;
    return nv;
}
编辑于 2015-03-24 20:51:28 回复(0)