shared_ptrを使って通信した方が楽
ストリーミング再生でスレッドを回す必要があったりなど、まあスレッドを使わねばならない場合というのは比較的多いと思います。
僕はWinAPIなどの面倒なスレッドライブラリを使う気力がまったく持って起きませんのでboost.Threadを使うわけですが、Mutexをロックしてから何か操作をして…というのをクラス内で全てやってると凄い面倒です。いろんなところにscoped_lock lk(Mutex);みたいにかかなきゃいけなくて。
Mutexでやるのは面倒だけど、並列に処理したいという場合には私が最近押してるのはshared_ptrを使ったatomic accessです。
boost::shared_ptr<stream_thread> st; // ストリーミング処理 void stream_main() { while( auto i = atomic_load(&st) ) { ....; } } // 割り込んで何かの処理を行う // 例えば、再生位置の変更など void hogehoge() { auto i = atomic_load(&st); i->seek( 1024 ); }
こういう風にして簡単に実装できた方が労力は半減すると思うのです。
# boostのページでshared_ptrのところ見てもatomic accessに関する説明がない気がするのですが、もしかして見るところ間違ってる?
クラス1個でやり取りできるような場合はこっちの方が良い気がします。