Многопоточный dll и блокировка при вызове функции из второго потока - PullRequest
1 голос
/ 05 марта 2012

У меня есть программа, которая может использовать плагины DLL.Если программа хочет попросить плагин о каком-либо решении, она отправит сообщение в dll и будет ждать результата

Программа также дает dll, указатель на функцию GetSymbol.Используя эту функцию, dll может запросить у программы некоторые символы.

Я создал своего рода прокси-сервер dll.Если программа отправляет сообщение в dll, dll отправляет клиенту вызов xmlrpc и возвращает результаты.У Dll также есть второй поток, который работает как сервер xmlrpc.Поэтому клиент может отправить вызов xmlrpc для запроса символа.

Я обнаружил некоторую интересную проблему с этим.И я понятия не имею, что не так.Когда я использую функцию GetSymbol из потока 1, все работает нормально.Но когда я пытаюсь использовать его из потока 2 Программные блокировки ... Возможно ли это?Как Программа может узнать, какой поток DLL вызвал функцию GetSymbol?

Scenario

1 Ответ

1 голос
/ 23 июля 2012

Возможно мьютекс.

Возможно, что программа удерживает мьютекс при запуске в dll.И GetSymbol пытается заблокировать один и тот же мьютекс внутри, чтобы защитить некоторые структуры.

Если тот же поток попытается снова заблокировать мьютекс, он пройдет и увеличит число блокировок на мьютексе.(reentrant mutex).

Если thread2 вызывает GetSymbol, он фактически будет ожидать мьютекс.И «Программа» также будет удерживать ее, потому что она ожидает, что process_message завершится первым.

...