[Anthy-dev 2419] reentrant uim?

Back to archive index

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*****



Anthy-dev メーリングリストの案内
Back to archive index