我正在開發一個使用共享內存和互鎖函數的系統。聯鎖函數C++
我們假設我有volatile unsigned int n, a, b
。我想以原子方式執行以下僞代碼:
if (a <= n && n < b)
{
n++;
}
else
{
//Do nothing
}
我該怎麼做?你可以一起使用多個互鎖功能嗎?
我正在開發一個使用共享內存和互鎖函數的系統。聯鎖函數C++
我們假設我有volatile unsigned int n, a, b
。我想以原子方式執行以下僞代碼:
if (a <= n && n < b)
{
n++;
}
else
{
//Do nothing
}
我該怎麼做?你可以一起使用多個互鎖功能嗎?
您需要鎖定或CAS類型的操作。 volatile
將在這裏幫助。既不會是一個真正的原子數據類型。
CAS非常適合這種類型的操作。好決定。這裏是[一些例子](http://blogs.msdn.com/b/oldnewthing/archive/2004/09/15/229915.aspx)。 –
@Ben - 有趣的是,我們都發布了一箇舊的新事物的鏈接。 – vcsjones
@vcs @ben只是提到雷蒙德通常值得一些upvotes –
同步原語(如信號量,互斥體等)由操作系統特定的庫提供,而不是語言本身。 C/C++沒有固有的「同步」關鍵字。
如果你在Linux編程,看POSIX線程或Boost庫:
http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html
如果您在本機Windows Win32編程(在Win98或更高版本),你可以像使用的API EnterCriticalSection的()和InterlockedAdd(),其中包括:
http://msdn.microsoft.com/en-us/library/ms686353%28v=VS.85%29.aspx
如果你正在編寫與.net的Windows,但是,你又回到了同步原語作爲標準的一部分。網庫:
http://msdn.microsoft.com/en-us/library/ms173179.aspx
「希望幫助.. PSM
下面是一些良好的閱讀,讓你開始:http://blogs.msdn.com/b/oldnewthing/archive/2004/ 09/15/229915.aspx – vcsjones
對於多線程,採取一切你認爲你已經知道的關於'volatile'的知識,並把它扔掉。 – GManNickG