2013-07-18 26 views
1

我有2個進程共享一個由互斥鎖和條件同步的隊列。我在我的一個進程中有以下代碼。在while(1)循環中boost互斥體上的scoped_lock

named_mutex mutex(open_only, "MyMutex"); 

int main() 
{ 
    while(1) 
    { 
     scoped_lock <named_mutex> lock(mutex) 
     //do some processing 
    } 
} 

我的問題是互斥是否有範圍遍及while循環的所有呼叫或是否需要每次while循環開始被收購?它被解鎖的互斥體的範圍是什麼?似乎每次在while循環結束時都會解鎖互斥鎖。

感謝

回答

7

它的行爲完全一樣,循環體中的任何其他局部變量:它會被創建和每itereation銷燬一次。在這種情況下,它會在每次迭代中鎖定和解鎖互斥鎖。

0

A scoped_lock,正如其名稱所暗示的那樣,在創建時鎖定互斥鎖(在其ctor中),並在刪除時(在它的dtor中)解鎖它。

由於lock實例的範圍是while主體內時,將創建scoped_lock時每當while循環結束該互斥鎖定,和解鎖:應在breakcontinue,或甚至一個return陳述中找到,或只需在達到每個循環一次時達到每個循環的末端while

+2

你的答案不明確; while循環結束時的*是什麼意思?在每次迭代結束時,或者當你跳出循環時? – Praetorian

+0

我用單數,一個循環,沒有所有的循環。確切的時間是當程序離開「while」範圍時,然後發現「break」,「continue」指令時,或者當它到達主體的末尾時。 –