我在两个C#应用程序中使用(并引用)两个第三方dll(a.dll和b.dll)。我遇到了一个可重复的问题,即两个应用程序在调用第三方库中的函数时挂起。
我试图复制a.dll和b.dll(a2.dll和b2.dll)并在第二个应用程序中使用它,但事实证明a.dll引用了b.dll,anb b .dll引用了a.dll,但无法正常加载。
我怀疑在第三方库中存在死锁。我无法使用锁定来防止这种情况发生。每个应用程序都强制执行锁定以确保该应用程序一次只有一个线程访问该库,但我无法锁定这两个程序。
所以,我的问题是如何解决这个问题?
我可以告诉操作系统(Windows XP)我不想共享dll吗?
谢谢, 乔
答案 0 :(得分:4)
您可以使用命名的互斥锁限制访问,以便一次只限一个程序。命名互斥锁可以限制整个操作系统,因此可以用来阻止来自多个进程的访问。
有关详细信息,请参阅Mutex class。
答案 1 :(得分:1)
1)单程
2)另一种方式:使用一种在多个进程中可见的锁(例如Mutex
类)。
3)询问第三方DLL的供应商:您是否应该一次只能运行此DLL的一个实例?如果允许您运行多个实例,那么您必须采取哪些措施来避免跨进程的死锁?
答案 2 :(得分:1)
我曾经遇到与已停产的第三方产品类似的问题。
在那里,我使用了一个带有集成汇编程序的反汇编程序和十六进制编辑器来修复底层错误,但这或多或少是运气,因为原因很简单,可以通过查看反汇编来得出。
取决于您可能选择的实际原因。
答案 3 :(得分:0)
如何创建另一个线程 - 负责访问此dll ...这样整个应用程序不会冻结