C / C++ のマルチスレッド,排他制御の質問です. 以下のコードをベースに ”AAA”と”BBB”を交互に出力するにはどのようにすれば良いでしょうか?

C言語関連 | プログラミング85閲覧xmlns="http://www.w3.org/2000/svg">100

ベストアンサー

0

2つのmutexを交互にlock,unlockすれば可能ですね。 課題のようですから、ソースはアップしません。 condition_variableのコードでは、課題的には△となるでしょう。

ThanksImg質問者からのお礼コメント

ありがとうございます! 課題ではないのでcondition_variableでも問題ありません。 waitやnotify_one()など上手く使いこなせるように頑張ります。 大変参考になりました。

お礼日時:6/26 2:25

その他の回答(2件)

0

mutex mtx; const char *const AAA="AAA"; const char *const BBB="BBB"; const char *outstr=AAA; void ThreadA(void){ while(true){ mtx.lock(); cout<<outstr<<endl; outstr=(outstr==AAA)?BBB:AAA; mtx.unlock(); } } void ThreadB(void){ //ThreadAと同じ 競合するリソースをまとめて、それらに対してロックをかけるイメージです。ただし排他制御は、よほどうまくやらないとデッドロックのなどの地味に難しい問題が発生します。

1

呼び出し順序を保ちたいなら、わざわざThreadを使わず、AAAとBBBを交互に行うwhile文を書きます。

1人がナイス!しています