thread mutex et mémoire partagée

thread mutex et mémoire partagée - C - Programmation

Marsh Posté le 04-12-2004 à 13:18:30    

Bonjour,
 
je voudrais mettre en place un mécanisme de wait/notify dans un prog. J'utilise dc des mutex posix couplés avec des threads conditions.
J'ai un fichier .c qui encapsule tout ce mécanisme et offre comme primitives de manipulations un waitEvt() et un notifyEvt() (à travers le .h)
Dans un autre fichier, le main implémente 2 threads, l'un va invoquer la primitve wait, l'autre la prmitive notifiy : tout se déroule bien.
Maitenant si je sépare mes deux threads en deux processus (2 mains koi !), ca marche plus. Ces deux mains font un include du fichier.h de gestion des mutex et des cond.
Je vois bien que je suis un train d'appliquer des threads alors qu'à priori je ne fais pas de la mémoire partagée, mais quand je suis l'exécution : l'adresse du mutex est bien la même.
 
Ca serait surment plus propre de faire de l'IPC, mais pkoi ca ne marche pas comme ca.
Qqun a une idée ?

Reply

Marsh Posté le 04-12-2004 à 13:18:30   

Reply

Marsh Posté le 04-12-2004 à 13:44:57    

L'adresse a l'air d'être la même car chaque processus a son propre espace d'adressage (le processeur faisant la conversion vers l'adresse physique). En pratique, il te faudra utiliser de l'IPC pour faire ça, car les mutex sont uniquement utilisés pour faire du multi-threads.
 
Pourquoi pas utiliser un kill tout bête, et l'attendre avec un pause() ou un sigpause()...
 
(D'ailleurs, c'est plutôt une variable conditionnelle que tu viens de nous décrire là.)

Reply

Marsh Posté le 04-12-2004 à 18:38:26    

bon je suis passé à de l'ipc, grrr, ca marche tjrs pas. La je comprends vraiment plus.

Reply

Marsh Posté le 05-12-2004 à 16:45:15    

J'ai pas tres bien suivi, mais :
L'utilité des thread, c'est de partager un meme espace de donnée d'un processus.
Donc un main, un processus, plusieurs thread.
 
Si tu modifi ton programme, et crée 2 processus, il n'y a plus aucun partage de donnée, ton mutex n'est plus commun, quelque soit son adresse "virtuelle" !
 
Apparemment, tu veux juste synchroniser 2 processus, et dans ce cas, l'ipc est la solution.
Comme le dit Lam's, utilise des signaux, SIGUSR1 par exemple, redefinir le handler etc...
 
a+

Reply

Marsh Posté le 06-12-2004 à 13:04:58    

Ou alors l'utilisation de SEMAPHORE est très bien aussi ;)

Reply

Marsh Posté le 06-03-2005 à 17:22:11    

hoov a écrit :


 
Si tu modifi ton programme, et crée 2 processus, il n'y a plus aucun partage de donnée, ton mutex n'est plus commun, quelque soit son adresse "virtuelle" !
 
 
a+


 
lol ça c'est la meilleure de l'année ..."2 processus -> plus aucun partage de données"... à la base le mutex s'inscrit quand même dans la logique des sémaphores il me semble et un sémaphore ça sert quand même bien à synchroniser plusieurs ps... mutex-> sémaphore -> inter process communication et qui dit ipc dit partage de données
 
edit : sous la norme posix, en utilisant un sémaphore nommé, 2 processus distincts (et pas un étant fils de l'autre) peuvent bien communiquer entre eux !


Message édité par alvoryx le 06-03-2005 à 18:11:27
Reply

Marsh Posté le 07-03-2005 à 08:08:11    

gauthier_la a écrit :

bon je suis passé à de l'ipc, grrr, ca marche tjrs pas. La je comprends vraiment plus.


 
regardez toujours si pthread_condattr_setpshared et si pthread_mutexattr_setpshared sont implémentées sur votre plateforme. Si c'est le cas, il vous suffit d'utiliser correctement ces appels et de mettre les données partagées entre les threads (conditions et mutexes compris) dans de la shared pour que cela marche entre des processus sans plus de modifs.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed