Closed qryxip closed 2 months ago
現行実装と変わらず、特に問題無く並行実行できるはずです。close時に1箇所以上からのアクセスがまだ走ってるなら、そのすべてが終わるまでロックするという感じです。私がreader writer lockと言ったやつについては(呼び方は違いますが)以下リンクで解説されています。 共有/排他ミューテックス(Shared-Exclusive Mutex) - マルチスレッド・プログラミングの道具箱 - Zenn
(まあ並行実行のテストは無いです。が、並行実行のテストというのも難しいのでこういう感じのベンチのコードを管理して手軽に確認できるようにするという感じがよさそう) https://github.com/VOICEVOX/voicevox_core/issues/746#issuecomment-2002471106
おおなるほどです!!問題なさそう! レビュー始めたいと思います🙏
aebe2ea
(#832): 誤字訂正80c707b
(#832) +5-5
のちょっとしたリファクタ
内容
829 を行います。変更は大体こんな感じです。
VoiceModel
(C以外)VoiceModelFile
(C以外)VoicevoxVoiceModel
(C)VoicevoxVoiceModelFile
(C)VoiceModel
をコンストラクトする。VoiceModel::from_path
(Rust, Python)VoiceModelFile::open
(Rust, Python)voicevox_voicemodelnew_from_path
(C)voicevox_voice_modelfileopen
(C)VoiceModelFile::close
(Rust, Python, Java)VoiceModelFile.__a{enter,exit}__
(Python, Java)voicevox_voicemodeldelete
(C)voicevox_voice_modelfileclose
(C)Synthesizer::load_voice_model
中にVoiceModelFile::close
したときの挙動はこんな感じになっているはずです。ただしまだこれらについてのテストは書いてませんし手動での確認もやってません。Synthesizer::load_voice_model
中にclose
したときの挙動例外(Javaと同様にロックして待つException
)を発するload_voice_model
が終わるまでロックして待つ[追記1] Python APIで
load_voice_model
が終わるまでロックして待つのが面倒そうに感じたのでこうなってしまったのですが、よく考えたらそんなに難しくなかった。それよりもロックするようなデザインにするか例外を発するようなデザインにするかですね。[追記2] ロックする方のデザインの方がいいかもですね。reader-writer lockが一つあれば実装できますし、C APIにもAPIをシンプルにしたまま仕込める。
[追記3] Python APIをロックするデザインにしてしまいました。こんな感じになります。
関連 Issue
Resolves #829.
その他