0

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

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

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

我该怎么做?您可以同时使用多个互锁功能吗?

4

2 回答 2

5

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

于 2011-07-03T16:36:13.633 回答
2

同步原语(如信号量、互斥量等)由特定于操作系统的库提供,而不是在语言本身中提供。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

于 2011-07-04T06:34:36.030 回答