

こちらのサイトを参考にしシリアル通信のプログラムを作成したのですが，  
<http://chicklab.blog84.fc2.com/blog-entry-29.html>  
スレッドで一定周期，例えば20Hz毎にwriteするとし，  
別スレッドで同じポートを使用し任意のタイミングでwriteしたいと考えています  
もし同じタイミングで呼び出された場合競合してしまいますよね？  
boost::asio::strandなどを用いてスレッドセーフにしようかと考えたり  
flag管理なども考えたのですが上手くいきません  
何か良い方法はありますでしょうか？


CC BY-SA 3.0
2015-10-23T01:17:16.650
17961
2015-11-02T02:12:16.103
12913
question
c++ boost
boostのシリアル通信について


経験的に一つのポートに対して複数のスレッドからread/writeしたり、readとwriteを別スレッドに分けるのは、実装が複雑になって上手くいきません。  
このような場合には一つのスレッドを作って（仮にスレッドhoge）ポートへのread/writeをスレッドhogeから全て行うようにします。他のスレッドからポートへのread/writeを行いたい場合にはqueue等を使ってスレッドAに対して要求を送り、実際のポートへのread/write操作はスレッドhoge内に記述することで排他制御や状態遷移の実装が容易になります。


CC BY-SA 3.0
2015-11-02T02:12:16.103
18309
2015-11-02T02:12:16.103
12774
17961
answer