线程安全变量comaprison C VS2010

时间:2016-01-05 08:03:44

标签: c multithreading visual-studio-2010 winapi interlocked

线程编程

我想编写简单的多线程应用程序。

每个线程在打开时我逐一增加(使用InterlockedIncrement)成员, 并在线程完成时递减它(使用InterlockedDecrement

我知道Mutex/Semaphore/event

但是我会更清洁/简单地实现类似于Interlocked函数的比较。

接下来我需要的是实现比较函数[if(member == x)]

简单的例子:

线程1功能:

{
//do somthing 
InterlockedDecrement(member);
}

线程2功能:

{
//do something else
InterlockedDecrement(member);
}

主线程功能:

{
  while(member)//<--how can it be done in thread safe fashion
  {
    //do yet another something
  }
}

1 个答案:

答案 0 :(得分:2)

使用InterlockedAdd并添加0.这将锁定成员并返回值而不更改它:

while (InterlockedAdd(&member, 0) == someValue) 
{
    //do yet another something
}