[英]Looking for a function (or a macro) to return a boost::scoped_lock
我正在尋找代碼縮短的想法。 我正在使用boost::scoped_lock
來鎖定boost::mutex
但我想縮短我正在編寫的代碼量。
目前,我在 class 和名為_sync
的成員字段中定義了一個mutex
。 當我想鎖定時,我必須寫:
scoped_lock<mutex> lock(_sync);
The tricky part is that this is a scoped lock, so I assume that if I write a static function to return the scoped_lock, then it will unlock as soon as it gets out of the function scope of the static function:
static scoped_lock<mutex> lock(mutex& sync)
{
return scoped_lock<mutex>(sync);
}
這種方法可以很容易地輸入:
public void Object::modify()
{
lock(_sync); // <-- nice and short! ;)
// do something to modify the object
//..
// the mutex is unlocked when we leave the scope of modify
}
我的假設正確嗎? 當我的 static function 返回時, scoped_lock
會立即解鎖嗎?
不...
當您鍵入scoped_lock<mutex> lock(_sync)
時,每個閱讀您的代碼的人都知道發生了什么,如果您在兩年后查看您的代碼,您也會知道。 懶惰通常是創建實現的不良動機。 除非您想強制使用,否則需要編寫此表達式的地方不止數百個,請不要這樣做
在您寫出問題所花費的時間,以及您花在思考如何做上的時間,以及我們所有人回答您的問題所花費的時間中,您可能已經編寫了所有scoped_lock<mutex> lock(_sync)
你需要的scoped_lock<mutex> lock(_sync)
。 特別是如果您正在使用 IDE 完成支持。
#define LOCK(a) scoped_lock<mutex> scopedLockVar(a)
public void Object::modify()
{
LOCK(_sync); // <-- nice and short! ;)
// do something to modify the object
//..
// the mutex is unlocked when we leave the scope of modify
}
您應該為定義使用一個安全的名稱...編譯器只使用查找和替換來定義...
我原以為你的鎖會被完全編譯掉。
作用域鎖的要點是它存在於本地,所以你必須在本地聲明它。 我不認為沒有宏可以在 c++ 中解決這個問題(它只是將代碼隱藏在其他地方)。
我認為使用 typedef,然后每個人都知道你在做什么。
typedef scoped_lock<mutex> lock; //at the start of your class
lock l(_sync); //in your function.
我不認為這有那么糟糕......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.