Closed olegtarasov closed 6 years ago
Добрый день, Олег,
Столкнулся с проблемой при использовании морфологического анализатора с флагом SOL_GREN_MODEL из нескольких потоков. Вызов crfsuite_instance_finish в SequenceLabeler.cpp довольно быстро ломает кучу. Судя по исходникам CRFSuite, в нём не предусмотрена работа с одной моделью из нескольких потоков. tagger->set устанавливает текущему таггеру инстанс, и пока один поток выполняет анализ, второй поток может установить тому же таггеру новый инстанс, после чего первый поток окажется в неизвестном состоянии.
спасибо за информацию, добавил крит. секцию в SequenceLabelerModel::Apply (SequenceLabeler.cpp).
Столкнулся с проблемой при использовании морфологического анализатора с флагом
SOL_GREN_MODEL
из нескольких потоков. Вызовcrfsuite_instance_finish
вSequenceLabeler.cpp
довольно быстро ломает кучу. Судя по исходникам CRFSuite, в нём не предусмотрена работа с одной моделью из нескольких потоков.tagger->set
устанавливает текущему таггеру инстанс, и пока один поток выполняет анализ, второй поток может установить тому же таггеру новый инстанс, после чего первый поток окажется в неизвестном состоянии.Для себя я решил эту проблему с помощью пула
GrammarEngine
'ов, который выдаёт каждому потоку полностью изолированный инстанс всего движка.