2011-09-19 2 views
0

J'ai écrit deux programmes qui communiquent sur tcp. Ces deux programmes sont en principe les mêmes. Les messages sont stockés dans un tampon interne, avant de les envoyer sur TCP. J'utilise un mutex pour protéger ce tampon pour une lecture/écriture simultanée. Pour tester, j'ai exécuté ces deux programmes sur le même ordinateur et j'ai eu des problèmes de synchronisation. J'ai découvert que CreateMutex renvoie toujours le même handle sur les deux programmes et donc un programme bloque l'autre! Peu importe le nom que j'utilise pour le mutex, il est toujours le même sur les deux programmes. Qu'est-ce que je fais mal?CreateMutex dans deux programmes différents, même handle (gcc)

Répondre

4

Si vous utilisez simplement le mutex dans un programme, utilisez un nom un-set anonyme à NULL. Le nom n'est réellement utilisé que lorsque vous voulez communiquer entre deux programmes (... s'exécutant sur la même session de connexion, par défaut, ou sur la même machine, si vous utilisez un préfixe 'global \'.)

Dans le cas contraire, vous pourriez utiliser une section critique au lieu d'un mutex - c'est une version plus légère qui ne peut être utilisée que dans un processus.

+0

Et, bien sûr, l'appeler avec 'bInitialOwner == TRUE'. – MSalters

+0

Cela ne fait aucune différence si je mets le nom à NULL ou non. Et avec 'bInitialOwner = TRUE', mon programme est bloqué lorsque j'appelle' WaitForSingleObject'. (Peut-être que j'aurais dû le sortir en premier?!). Mais j'ai déjà passé à CriticalSection et ça fonctionne maintenant. Merci! – Sascha

Questions connexes