我是新增加的線程(來自Win32線程,可能毀了我)。是否有與此「safe_read」調用等效的提升
所以我試圖做一個更「RAII」的方式來檢查工作循環是否應該繼續。所以我做了這個簡單的功能:
template<typenameT>
T safe_read(const T& t,boost::mutex& mutex)
{
boost::interprocess::scoped_lock lock(mutex);
return t;
}
是否有一個提升等同於此,因爲它好像我會一直使用這個?另外這是一個可以接受的電話?
的想法是能夠安全地做到這一點,而無需使用鎖怪異:
while(!safe_read(this->is_killing_,this->is_killing_mutex_))
{
DoWork();
}
無論您是否鎖定,布爾值都將爲true或false。退出safe_access調用會發生什麼? – Nick 2013-05-09 15:10:16
@Nick,鎖定在那裏,因爲布爾值正在從另一個線程中更改。因此,如果單獨的線程在while讀取布爾值時更改布爾值,則行爲是「未定義的」。大多數電腦在內存模型中可能有足夠的同步控制來處理,但我不相信它。 – IdeaHat 2013-05-09 15:16:39
@hmjd我沒有,這看起來像一個更清潔的解決方案,我想這就是答案! – IdeaHat 2013-05-09 15:31:11