2011-07-03 15 views
0

我正在開發一個使用共享內存和互鎖函數的系統。聯鎖函數C++

我們假設我有volatile unsigned int n, a, b。我想以原子方式執行以下僞代碼:

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

我該怎麼做?你可以一起使用多個互鎖功能嗎?

+1

下面是一些良好的閱讀,讓你開始:http://blogs.msdn.com/b/oldnewthing/archive/2004/ 09/15/229915.aspx – vcsjones

+3

對於多線程,採取一切你認爲你已經知道的關於'volatile'的知識,並把它扔掉。 – GManNickG

回答

5

您需要鎖定或CAS類型的操作。 volatile將在這裏幫助。既不會是一個真正的原子數據類型。

+2

CAS非常適合這種類型的操作。好決定。這裏是[一些例子](http://blogs.msdn.com/b/oldnewthing/archive/2004/09/15/229915.aspx)。 –

+0

@Ben - 有趣的是,我們都發布了一箇舊的新事物的鏈接。 – vcsjones

+2

@vcs @ben只是提到雷蒙德通常值得一些upvotes –

2

同步原語(如信號量,互斥體等)由操作系統特定的庫提供,而不是語言本身。 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