過去幾年我一直在使用C#,而我目前正在使用C++進行bug修復。 在C#中,我可以使用對象上的鎖,使我的代碼線程安全的搭配:在C++中使用範圍自動鎖定/解鎖(來自C#背景)
lock(lockObject)
{
// Do some work
}
,如果有內// Do some work
異常這將解鎖lockOject是否有C++類似的東西?此刻,我能想到的兩種:
// Code
{
AutoLock lock(lockObject);
// Do some work
}
// More Code
,但我不喜歡大括號只是爲了範圍我AutoLock
。目前,我正在做:
AutoLock lock(lockObject);
// Do some work
lock.Unlock();
,讓異常展開解除鎖定,如果有在//Do some work
異常。
我現在正在做的工作,但我想知道是否有更好的方法,謝謝。
_But我不喜歡大括號只是爲了限制我的'AutoLock'._除了它們的放置位置,它們與C#所做的有什麼不同呢? – 2010-07-19 16:18:13
用C#的'using(..){...}'和'lock(...){...}'你可以看到發生了什麼。對我來說,只有空的'{...}'創建一個本地範圍來使'Autolock'毀壞纔是錯誤的。 – JLWarlow 2010-07-20 08:17:45
這是有道理的。 C++的做事方式的一個優點是你只需要一個範圍來清理多個鎖;如果我記得沒錯,在C#中,最後可能會出現'lock(m0){lock(m1){lock(m2){}}}' – 2010-07-20 14:53:28