私はミューテックスのチュートリアル/例をグーグルで調べてきましたが、必要な状況に合ったものを見つけることができないようです(または、おそらく私はそうしましたが、現時点では完全に理解していないため、自分の状況に適用する方法を理解していませんでした)。
2つのコールバック関数を持つC++dllがあります。コールバック関数は、サードパーティのプログラムから呼び出されます。各コールバック関数は、グローバル変数(個別のグローバル変数)に情報を追加します。これらのグローバル変数をそれぞれ使用する他の2つの関数があります。
サードパーティのプログラムには多くのスレッドがあるため、コールバック関数が常に呼び出されています。他の2つの関数は、ユーザーが手動で呼び出します。グローバル変数は、一度に2つのものからアクセスされることになり、クラッシュを引き起こします。
現在、グローバル変数は次のようなクラスにあります
class Global
{
public:
static CString & get_allscores() { static CString get_allscores; return get_allscores; }
static CString & get_allplayers() { static CString allplayers; return allplayers; }
};
誰かが、これらのグローバル変数の1つにアクセスしている2つの関数でmutexを使用する方法の簡単な例を教えてもらえますか?
ありがとう
編集:
このような状況はどうですか
CString allchat; //global variable
void function1()
{
allchat += "test";
}
void function2()
{
cout << allchat;
}
これらの関数が多くのスレッドによって繰り返し呼び出され、順序が狂っている場合、ミューテックスオブジェクトを追加して、マルチスレッドに対応させることはできますか?
これまでの私の計画は、プログラムの起動時に所有者なしでミューテックスを作成することでした。その後、各関数が呼び出されると、所有権を取得し、関数の最後に解放します。これは正しい方法ですか?