|
▼/|/ |/さん:
>ところで、ココで新たな疑問が湧いたのですが、
>eriInitializeTask() と eriCloseTask()が必要になると、
>スレッド間で共有する場合とかに、どうなっちゃうのでしょうか?
特に問題はないと思います。
>そうすると、デコードとデコーダの初期化は、
>同一スレッド上で行うようにしなくてはならないですよね。
そうする必要もないと思います。
>オブジェクト自体を今までのように任意のスレッドで共有できるようにするには、
>デコーダオブジェクト内でスレッドを生成して、
>そこですべての動作を行う非同期モデルに変更する必要があります。
>そのあたり、どうなる予定でしょうか?
なぜライブラリ全体の初期化関数とは別にスレッドの初期化関数があるかと言えば、スレッドのコンテキストを初期化するためです。
現在は、eriInitializeTask では、FPUユニットとXMMユニットを初期化しています。(OSが正しく行っているはずですが、OSの初期状態が未定義なので、意図的に丸めなどを設定しています)
それと、将来この関数に他の機能がつくとすれば、TLSにライブラリのスレッド固有の情報を書き出すことです。(多分ないです)
>また、LibraryおよぼTaskのInitializeとCloseには、
>参照カウントがありますか?
>それとも、各々1回ずつでなくてはダメなのでしょうか?
現在は参照カウンタは使っていません。(Close関数は何もしないので)
もし、将来Close関数が何らかのリソースを開放するような動作をするような場合には、Initialize関数を呼び出した回数Close関数を呼び出すまではリソースは開放されなくなります。
スレッドでどうこうと言う話ですが、オブジェクトへの操作(メンバ関数呼び出しやメンバ変数へのアクセス)が複数のスレッドから同時に行われても問題ないように(普通マルチスレッドプログラミングでそうするように)外側で作ってやればまったく問題はありません。
|
|