2011-02-01 14 views
1

ICUライブラリのucnv_convertExがスレッドセーフであるかどうか疑問に思っています。ソースを見るとスレッドセーフですが、100%確実ではありません。また、私はICUのドキュメントでこれの明示的な状態を見つけることができません。はICUのucnv_convertExスレッドセーフですか?

おかげ

答えて

2

ICU User Guideはオープ​​ン/クローズのモデルを持っているすべてのオブジェクトに対して、これについて説明します。各Converterオブジェクトは、一度に1つのスレッドで使用する必要があります。もっと必要なものがあれば、それらを複製してください。彼らはクローンを作るのに安価です。

ところで、あなたはこの情報をどこから期待していますか?たぶんあなたはチケットを発行することができ、ドキュメントを改善することができます。ありがとう。

+0

私はあなたがICUの貢献者であることを知りました... "const-methods"をスレッドセーフにしてもらえますか?スレッドセーフな環境でこのようなオブジェクトを使用するのは大変な努力をしています。とても痛い。 Boost.LocaleでTLSと広範なキャッシングを使用して終了し、ICUで速く動作するようになりました。また、UTF-8サポートは大幅に改善されなければなりません。 ':-) ' – Artyom

1

基本的にICUはスレッドセーフですが、:

  1. あなたはそれが実際には、これはこれは一般に安全ではない(異なるスレッドから同じオブジェクトのそれ上で動作constメンバ関数/関数を呼び出しても安全であると仮定することはできません
  2. もちろん、異なるスレッドのオブジェクトを扱っている非コストのメンバー関数/関数では、同じオブジェクトを使用することはできません。

基本的にucnv_convertExの場合、スレッド間でUConverterを共有しない限り、安全です。

+0

スレッド間でUConverterを共有しない限り、スレッドセーフであると定義されています。 Uコンバーターは軽量ですが、コンバージョンの状態が含まれています。それらは共有されたスレッドセーフなデータによってバックアップされます。私たちは厄介ではないように... –

関連する問題