我有可以使用dll插件的程序。如果程序想要插件进行某些决定,它会向dll发送消息并等待结果。
程序也给dll,指向GetSymbol函数的指针。使用此函数,dll可以向程序询问某些符号。
我创建了某种dll代理。如果程序向dll发送消息,则dll向客户端发送xmlrpc调用并返回结果。 Dll还有第二个线程,作为xmlrpc服务器。所以客户端可以发送xmlrpc调用来询问符号。
我发现了一些有趣的问题。我不知道出了什么问题。当我从线程1使用GetSymbol函数时,一切正常。但是当我试图从线程2程序锁中使用它时......它可能吗?程序如何知道哪个DLL线程称为GetSymbol函数?
答案 0 :(得分:1)
可能是互斥锁。
程序在运行到dll时可能会持有互斥锁。并且GetSymbol尝试在内部锁定相同的互斥锁以保护某些结构。
如果同一线程再次尝试锁定互斥锁,它将通过并增加互斥锁上的锁定计数。 (可重入互斥)。
如果thread2调用GetSymbol,它实际上会等待互斥锁。 “程序”也会保留它,因为它等待process_message首先完成。