簡體   English   中英

尋找 function (或宏)以返回 boost::scoped_lock

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM