Ich lese ein paar Dokumente über Mutex und immer noch die einzige Idee, die ich habe, ist, dass es verhindert, dass Threads auf eine Ressource zugreifen, die bereits von einer anderen Ressource verwendet wird.Kann jemand Mutex erklären und wie es benutzt wird?
Ich habe von Code-Schnipsel und ausgeführt, die funktioniert:
#include <windows.h>
#include <process.h>
#include <iostream>
using namespace std;
BOOL FunctionToWriteToDatabase(HANDLE hMutex)
{
DWORD dwWaitResult;
// Request ownership of mutex.
dwWaitResult = WaitForSingleObject(
hMutex, // handle to mutex
5000L); // five-second time-out interval
switch (dwWaitResult)
{
// The thread got mutex ownership.
case WAIT_OBJECT_0:
__try
{
// Write to the database.
}
__finally {
// Release ownership of the mutex object.
if (! ReleaseMutex(hMutex)) {
// Deal with error.
}
break;
}
// Cannot get mutex ownership due to time-out.
case WAIT_TIMEOUT:
return FALSE;
// Got ownership of the abandoned mutex object.
case WAIT_ABANDONED:
return FALSE;
}
return TRUE;
}
void main()
{
HANDLE hMutex;
hMutex=CreateMutex(NULL,FALSE,"MutexExample");
if (hMutex == NULL)
{
printf("CreateMutex error: %d\n", GetLastError());
}
else if (GetLastError() == ERROR_ALREADY_EXISTS)
printf("CreateMutex opened existing mutex\n");
else
printf("CreateMutex created new mutex\n");
}
Aber was ich nicht verstehe, ist, wo ist der rote Faden und wo ist die gemeinsam genutzte Ressource? Kann jemand bitte einen besseren Artikel oder ein besseres Dokument erklären oder bereitstellen?
Ihr Code-Snippet scheint unvollständig zu sein, z. Ich kann nicht sehen, wo FunctionToWriteToDatabase aufgerufen wird. Kannst du mehr zur Verfügung stellen und wo hast du es her?Es wäre auch hilfreich, wenn Sie geklärt hätten, ob es sich bei Ihrer Frage um Mutexe im Allgemeinen oder dieses spezielle Code-Snippet handelt. – danio