lock_guardによるロックは、スコープ(関数)単位で掛けられる認識です。
以下のようなコードがあるとして、ロックのスコープの範囲を変えたい場合は、
変えることは可能でしょうか。
例えば、関数を抜けるときではなく、
以下のコメントの位置で開放したい場合。
以下のソースはシングルスレッドですが、
今後マルチスレッドでDataの値を操作することを想定しています。
C++
1struct Data { 2 int data; 3 std::mutex mtx; 4}; 5 6void work_lock(Data& d) 7{ 8 int n = 0; 9 10 std::lock_guard<std::mutex> lock(d.mtx); // ロックの取得 11 12 n = d.data; 13 n += 1; 14 d.data = n; 15 // 関数の終わりで、解放ではなくてここで開放したい 16 std::cout << "d.data : " << d.data << std::endl; 17 18} // 本来はここで開放されている 19 20int main() { 21 Data d; 22 d.data = 0; 23 24 work_lock(d); 25 26 std::cout << d.data << std::endl; 27}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/19 23:38