互锁函数c ++

时间:2011-07-03 16:33:31

标签: c++ multithreading shared-memory interlocked

我正在开发一个使用共享内存和互锁功能的系统。

我们假设我有volatile unsigned int n, a, b。我想原子地执行以下伪代码:

if (a <= n && n < b)
{
    n++;
}
else
{
    //Do nothing
}

我该怎么做?你可以一起使用多个互锁功能吗?

2 个答案:

答案 0 :(得分:5)

您需要锁定或CAS类型操作。这里没有任何数量的volatile会有所帮助。也不是真正的原子数据类型。

答案 1 :(得分:2)

同步原语(如信号量,互斥量等)由特定于操作系统的库提供,而不是由语言本身提供。 C / C ++没有内在的“synchronized”关键字。

如果你在Linux上编程,请查看Posix线程或Boost库:

http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

如果您使用本机Windows Win32(Win98或更高版本)进行编程,则可以使用EnterCriticalSection()和InterlockedAdd()等API:

http://msdn.microsoft.com/en-us/library/ms686353%28v=VS.85%29.aspx

如果您使用.Net编程Windows,那么您将回到同步原语作为标准.Net库的一部分:

http://msdn.microsoft.com/en-us/library/ms173179.aspx

'希望有所帮助.. PSM