2010-03-31

threadは明示的に使うべし

FCDで、thread周りの文面が、さらに明確に定義されるようになった。

たとえば、threadのデストラクタだ。もし、joinable()がtrueを返すthreadオブジェクトのデストラクタが実行された場合、terminate()が呼び出される。それ以外の場合、なにもしない(スレッドは、自分で実行を終えるまで、動き続ける。)

なぜか。もし、暗黙的に、join()やdetach()が呼び出される設計であれば、バグの温床になりえるからだ。

move代入演算子は、move元のオブジェクトが、joinableであった場合、terminate()を呼び出す。これはどうだろう。まあ、たしかに、join()している最中にmoveされたら、たまったものではない。join()出来る可能性があるオブジェクトをmoveするというのは、バグとみなしてもいいのかもしれない。

No comments: