J'ai lu quelques documents sur Mutex et toujours la seule idée que j'ai obtenue, c'est qu'il aide à empêcher les threads d'accéder à une ressource déjà utilisée par une autre ressource.
J'ai reçu de l'extrait de code et exécuté qui fonctionne bien : P>
#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"); }
4 Réponses :
Peut-être que ce sera la meilleure source pour vous p>
Vous pouvez renvoyer ce message pour la comparaison de divers mécanismes de synchronisation de thread. Différence entre les verrous, les moutons et les sections critiques P>
Si vous voulez des informations spécifiques, Mutex, alors Wikipedia vous donnera suffisamment de détails. P>
Un mutex fournit Votre code crée un nommé em> mutex qui peut être partagé sur plusieurs instances de votre application. Ceci est une forme de communication interprocession. Documentation MSDN sur Deux processus ou plus peuvent appeler
Createmutex pour créer le même nommé
mutex. Le premier processus en fait
crée le mutex et suivant
Processus avec un accès suffisant
les droits ouvrent simplement une poignée à la
MuTex existant ... p>
Les processus multiples peuvent avoir des poignées de
le même objet mutex, permettant l'utilisation de
L'objet d'interprocession
synchronisation. p>
blockQuote>
Un mutex n'est nécessaire que si la base de données que vous travaillez contre n'atteignez pas intrinsèquement l'accès multithreadisé. P> Createmutex code> A> a des informations utiles supplémentaires sur les mutexs nommés: p>
Ce lien dans MSDN fournit Un exemple similaire que le vôtre avec des threads fabriqués dans la fonction principale (). Mais à nouveau, la ressource partagée, censée être une base de données n'est pas incluse.
Quoi qu'il en soit, une ressource partagée est tout ce qui doit être accessible à partir de plusieurs threads: ModèlesFiles, pilotes, bases de données, ... P>
L'esprit que vous voulez que le compteur dans l'exemple est écrit lorsqu'il est protégé par le mutex, alors qu'il est lu sans être protégé. Dans ce cas, il n'y a probablement aucun problème, c'est un peu bâclé. P>
Votre code de code semble incomplet, par ex. Je ne peux pas voir où la fonction de fonctionnalité est appelée. Pouvez-vous fournir plus et où l'avez-vous obtenu? Il serait également utile que vous avez clarifié si votre question concerne les mutiles en général ou cet extrait de code particulier.