我正在开发一个使用共享内存和互锁功能的系统。
我们假设我有volatile unsigned int n, a, b
。我想原子地执行以下伪代码:
if (a <= n && n < b)
{
n++;
}
else
{
//Do nothing
}
我该怎么做?你可以一起使用多个互锁功能吗?
答案 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