Форум вопросов и ответов

Форум вопросов и ответов (https://www.otvetnemail.ru/)
-   Продолжение старого архива (https://www.otvetnemail.ru/prodolzhenie-starogo-arhiva-804/)
-   -   Рекурс в смешанном коде (https://www.otvetnemail.ru/prodolzhenie-starogo-arhiva-804/rekurs-v-smeshannom-kode-358610/)

Guest 30.09.2011 21:08

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


Часовой пояс GMT, время: 17:12.


© www.otvetnemail.ru - Форум вопросов и ответов.