2010-09-30 6 views
6

J'ai besoin de faire une synchronisation de processus en C. Je veux utiliser un moniteur, et j'ai beaucoup lu à leur sujet. Cependant, j'ai été incapable de trouver comment implémenter un en C. Je les ai vus en Java et d'autres langages comme C++, mais je suis incapable de trouver des exemples en C.Comment puis-je coder un moniteur en C?

J'ai regardé à travers K & R et il n'y a pas d'exemple là-dedans. J'ai parcouru la programmation, la communication, la concurrence et les threads d'Unix Systems, mais je n'ai pas réussi à trouver une implémentation de moniteur.

Ceci m'amène ici. Où et comment définir un moniteur? Comment l'implémenter dans le reste du code?

/* Je suis codage dans un environnement * nix */

Répondre

5

Je l'ai fait récemment pour un projet, le concept que je mis en œuvre était d'avoir un fil commence tous les autres, puis utiliser les sémaphores et mutexes pour le contrôle les problèmes de synchronisation inter-processus tout en traitant de la mémoire partagée.

Le concept d'un moniteur, dans le contexte du modèle de conception de moniteur, est une construction qui est fondamentalement là pour cacher l'excusion mutuelle. Ce concept est exprimé en C++ Boost mais il n'existe pas en C++ ou C de base. La façon dont vous gérez ce type de travail en C est avec de bons mutex à l'ancienne (sémaphores binaires) et des sémaphores. Vous pouvez lire plus à ce sujet here. Ci-dessous est un moyen basique d'initialiser un sémaphore et mutex, vous devrez peut-être lire comment et quand utiliser chacun d'eux car c'est un peu long à couvrir ici, mais here est un lien pour obtenir vous avez commencé.

pthread_mutex_t myMutex; 
sem_t mySemaphore; 
int status; 
    status = pthread_mutex_init(&myMutex, NULL); 
    if(status != 0) 
     exit_with_error("There was an Error Initalizing the Mutex\n"); 
    status = sem_init(&mySemaphore, 0, 0); 
    if(status != 0) 
     printf("There was an Error Initalizing the Semaphore\n"); 
+0

Cette implémentation est via une fonction? J'ai vu un code mineur comme: moniteur de réseau {/ * code et conditions dans ici * /}. Ce pseudo code ou existe-t-il une structure de mot-clé/données pour les moniteurs? –

+0

J'ai assommé la fonction de surveillance que j'avais et l'ai remplacée par une réponse plus directe. Si vous souhaitez que ce code revienne, faites-le moi savoir, je viens de relire votre question et j'ai vu que ce n'était pas tout à fait ce que vous demandiez. Dans votre commentaire ci-dessus que le code auquel vous faites référence est pseudo code, au meilleur de ma connaissance cette construction n'existe pas dans C. – JonVD

+0

Merci, je pense que je vais essayer d'implémenter le mien via une fonction avec des sémaphores dans le principal et essayer de Utilisez-le pour surveiller différents threads. J'ai besoin de lire plus sur le sujet, c'est assez complexe. –