Добрый деньЕсть несколько ниток выполняющих однотипную работу параллельно. Все они могут вызывать плагины (dll). Но дело в том что не все плагины thread-safe (потокобезопасны). Решение простое: защищаю вызов каждого плагина своим мутексомКодC++ (Qt)QMutexLocker lock(&mutex_1);CallPlug_1();Все хорошо, работает (вместо мутекса используется др примитив но суть та же самая). Только 1 нитка может вызвать "опасный" код. остальные будут ждать. Но вот проблема: некоторые плагины рекурсивны. То есть изнутри CallPlug_1 вызовется хост, которому опять может понадобиться вызов CallPlug_1 (глубина рекурсии устанавливается пользователем). Понятно что получаю dead lock с таким плагином. Мне известно место где плагин обратился к хосту, но если попробую отпереть мутекс - налетят др. нитки и плагин рухнет. Что будем делать?СпасибоEdit: поторопился запостить - решение оказалось совсем простым
|