質問: こちらのサイトを参考にしシリアル通信のプログラムを作成したのですが, スレッドで一定周期,例えば20Hz毎にwriteするとし, 別スレッドで同じポートを使用し任意のタイミングでwriteしたいと考えています もし同じタイミングで呼び出された場合競合してしまいますよね? boost::asio::strandなどを用いてスレッドセーフにしようかと考えたり flag管理なども考えたのですが上手くいきません 何か良い方法はありますでしょうか?
回答: 経験的に一つのポートに対して複数のスレッドからread/writeしたり、readとwriteを別スレッドに分けるのは、実装が複雑になって上手くいきません。 このような場合には一つのスレッドを作って(仮にスレッドhoge)ポートへのread/writeをスレッドhogeから全て行うようにします。他のスレッドからポートへのread/writeを行いたい場合にはqueue等を使ってスレッドAに対して要求を送り、実際のポートへのread/write操作はスレッドhoge内に記述することで排他制御や状態遷移の実装が容易になります。