我有一个公共资源,我想要1,只有我的应用程序的一个实例(或它的COM API)可以随时访问.我曾尝试使用互斥锁保护此资源,但是当主机dotnet应用程序的多个线程尝试访问COM对象时,似乎没有释放互斥锁.这是我用来保护资源的代码.
repeat
Mutex := CreateMutex(nil, True, PChar('Connections'));
until (Mutex <> 0) and (GetLastError <> ERROR_ALREADY_EXISTS);
try
//use resource here!
finally
CloseHandle(Mutex);
end;
Run Code Online (Sandbox Code Playgroud)
如果我同时运行线程,第一个线程就会通过(显然是第一个创建互斥锁的线程),但后续线程会在重复循环中被捕获.如果我以5秒的间隔运行每个线程,那么一切正常.
我怀疑我在这里没有正确使用互斥锁,但我发现很少有关于如何执行此操作的文档.
有任何想法吗?