我正在开发一个使用共享内存和联锁功能的系统。
假设我有volatile unsigned int n, a, b
。我想原子地执行以下伪代码:
if (a <= n && n < b)
{
n++;
}
else
{
//Do nothing
}
我该怎么做?您可以同时使用多个互锁功能吗?
我正在开发一个使用共享内存和联锁功能的系统。
假设我有volatile unsigned int n, a, b
。我想原子地执行以下伪代码:
if (a <= n && n < b)
{
n++;
}
else
{
//Do nothing
}
我该怎么做?您可以同时使用多个互锁功能吗?
您需要一个锁或 CAS 类型的操作。这里没有任何volatile
帮助。真正的原子数据类型也不会。
同步原语(如信号量、互斥量等)由特定于操作系统的库提供,而不是在语言本身中提供。C/C++ 没有内在的“同步”关键字。
如果您在 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