排他の対象について確認したいです。
以下の構造体DataとData_2それぞれに別のタイミングでロックをかけたい場合
それぞれの構造体にmutex宣言をし、
そのmutexの変数にstd::lock_guardstd::mutex lock(ここにmutecx変数)をしてあげれば
対象の構造体にロックがかかる認識で合っているでしょうか?
C++
1#include <iostream> 2#include <mutex> 3 4struct Data { 5 int data; 6 std::mutex mtx; 7}; 8 9struct Data_2 { 10 int data_2; 11 std::mutex mtx_; 12}; 13 14void work_lock_2(Data_2& dat) 15{ 16 std::lock_guard<std::mutex> lock(dat.mtx_); // ロックの取得 17 dat.data_2 = 500; 18 19 std::cout << "dat.data_2 : " << dat.data_2 << std::endl; 20} 21 22void work_lock(Data& d) 23{ 24 int n = 0; 25 26 std::lock_guard<std::mutex> lock(d.mtx); // ロックの取得 27 28 n = d.data; 29 n += 1; 30 d.data = n; 31 32 Data_2 dat; 33 34 dat.data_2 = 0; 35 36 work_lock_2(dat); 37 38 std::cout << "d.data : " << d.data << std::endl; 39 40} 41 42int main() { 43 Data d; 44 d.data = 0; 45 46 work_lock(d); 47 48} 49
もし、上記のコードの2つの構造体にいっぺんに排他をかけたい場合、
1つのクラスの中に2つの構造体を入れてmutex宣言をしてあげれば、両構造体に排他かかりますよね?(以下のような状態)
C++
1class Exclusive 2{ 3public: 4 struct Data { 5 int data; 6 }; 7 8 struct Data_2 { 9 int data_2; 10 }; 11 12 std::mutex mtx; 13}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/21 23:22