YamaKen
yamak****@bp*****
2005年 9月 24日 (土) 14:16:32 JST
ヤマケンです。 しばらく前から徳永さんがuimをthread safeにするための作業を行って らっしゃいますが、r1558のコードには疑問があったので一時的に revertさせてもらいました。 問題を感じているのはuimを単にthread safeにするだけでなく reentrantにするという方針です。 r1558のcommit logには"to make uim reentrant"とあり、 UIM_EVAL_FSTRINGn_WITH_MUTEX()というmutex付きevalマクロが導入さ れています。しかし、uimの中核であるSchemeインタプリタは現在trunk で使用されているSIODにしても近く導入予定のSigSchemeにしても reentrantではありません。よって、これを変えない限りはuimのC部分 がいくらmutex lockの粒度を小さくしても肝心のScheme部分ですぐに待 たされる事になり無意味です。 このような事情から現在のuimではAPI関数毎にgiant lockをかけるのが 現実的な落としどころだと思いますし、徳永さんの日記でもそういった 意図でアドバイスをさせてもらいました。表現が悪くて伝わらなかった かもしれませんが。 [Anthy-dev 2337]のようにthread safeにする責任をlibuimより上の層 に委ねるというのも一つの手ですが、私は上述のようなgiant lockぐら いならlibuimで提供してもよいと思います。ただしconfigure時の指定 でthread safe版と通常版の両方をビルドできるようにし、ブリッジや プラットフォーム毎にどちらをリンクするか選択できるようにする必要 はありますが(pthreadの存在検出だけでは不十分)。 どうでしょうか? ------------------------------- ヤマケン yamak****@bp*****