У меня есть общий ресурс, к которому в любое время я должен иметь доступ только к 1 и только 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;
Если я запускаю потоки одновременно, первый поток проходит (очевидно, будучи первым, создавшим мьютекс), но последующие потоки попадают в цикл повторения. Если я запускаю каждый поток с 5-секундными интервалами, то все в порядке.
Я подозреваю, что не правильно использую мьютексы, но нашел очень мало документации о том, как это сделать.
Есть идеи?