- - PR -
スレッドの停止の仕方について
«前のページへ
1|2|3|4
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-10-30 11:36
同期を取る範囲はできるだけ狭い方が良いと思うので、関数ごと同期をとるのはいかがなものかと(単純なアクセッサやミューテータメソッドならいいかもしれないけど)。 代わりに、プライベートロックを用意し、これで同期を取るというのはいかがでしょう。
また併せて、CMyThread#kill()のは同期メソッドにする必要があります(CMyThread内のフラグの同期のため)。 # 場合によってはMutex用意しないといけないかも知れない。 | ||||||||
|
投稿日時: 2003-10-30 13:59
ども、ほむらです。
スレッドはやっぱり奥が深いですね。 ---------------- かずくん氏へ
同期取る範囲は狭いほうが良いというのは僕も同じく考えています。 ただ、このThreadOnOff()の場合、スレッドのライフサイクルを制御するので 関数単位で同期とっても部分域で同期をとっても実行速度への影響は無いものと考えています。 (内部的にはほとんどの部分で同期を試みる仕様になると思いますし) というわけで、コードを単純にするために関数ごとの同期でよいかなと。。。 (ちなみに、最初からやらなかったのは忘れていただけです(笑 ) プライベートロックを作るというやり方は面白いですねー どちらかというとCriticalSession?の気がしますがこんなに簡単に使えるんですね 使わせてもらいます。^^ ところでkill()は同期を取る必要はありますか? 重複kill()に対応するためにスレッドの有効性を検査する部分は必要かと思いますが kill()が使用された時点でスレッドの死は確定しますので 同期を取る必要はないかと思ってたのですが。。。 (trueとなるのはコンストラクタだけのため) もしくはkill()自体はbThreadAliveがtrueだったらfalseにするだけにして CMyThreadクラス固有の開放は CMyThread::finalize()?を使用したほうが良いのでしょうか? 普段はkill()の中で開放(後処理)もしています | ||||||||
«前のページへ
1|2|3|4
