2010-09-30 10 views
6

Ich muss einige Prozesssynchronisation in C machen. Ich möchte einen Monitor verwenden, und ich habe viel über sie gelesen. Ich konnte jedoch nicht herausfinden, wie man eine in C implementiert. Ich habe sie in Java und anderen Sprachen wie C++ gesehen, aber ich finde keine Beispiele in C.Wie kann ich einen Monitor in C codieren?

Ich habe durch K & R und Da ist kein Beispiel drin. Ich habe Unix Systems Programming, Kommunikation, Concurrency und Threads überflogen, konnte dort aber keine Monitorimplementierung finden.

Das bringt mich hierher. Wo und wie definiere ich einen Monitor? Wie implementiere ich es innerhalb des restlichen Codes?

/* Ich bin Codierung in einer * nix Umgebung */

Antwort

5

ich dies für ein Projekt vor kurzem getan hat, das Konzept war ich implementiert ein Thread zu haben alle anderen beginnen und dann Semaphore und Mutex zu Steuerelement verwenden Die Interprozess-Synchronisierungsprobleme beim Umgang mit Shared Memory.

Das Konzept eines Monitors, im Kontext des Monitordesignmusters, ist ein Konstrukt, das im Grunde genommen vorhanden ist, um die gegenseitige Exkretion zu verbergen. Dieses Konzept wird in C++ Boost ausgedrückt, aber es existiert nicht in C++ oder C. Die Art, wie Sie diesen Job in C handhaben, ist mit guten altmodischen Mutexen (binären Semaphoren) und Semaphoren. Sie können mehr darüber lesen here.

Unten ist eine grundlegende Möglichkeit, einen Semaphor und Mutex zu initialisieren, müssen Sie einige lesen, wie und wann Sie jeden von ihnen verwenden, wie das ist ein wenig zu decken, aber here ist ein Link zu bekommen du hast angefangen.

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

Diese Implementierung erfolgt über eine Funktion? Ich habe einen kleineren Code wie: Überwachungsnetzwerk {/ * Code und Bedingungen hier * /} gesehen. War das Pseudo-Code oder gibt es auch Schlüsselwörter/Datenstrukturen für Monitore? –

+0

Ich habe diese Monitorfunktion, die ich hatte, ausgeschlagen und durch eine direktere Antwort ersetzt. Wenn Sie diesen Code zurück haben möchten, lassen Sie es mich wissen, ich lese Ihre Frage einfach noch einmal und merkte, dass es nicht ganz das ist, was Sie gefragt haben. In Ihrem obigen Kommentar, dass Code, auf den Sie sich beziehen, ist Pseudocode, nach bestem Wissen, dass Konstrukt nicht in C. – JonVD

+0

Dank, ich denke, ich werde versuchen, mine über eine Funktion mit Semaphoren in main zu implementieren und zu versuchen Verwenden Sie es, um verschiedene Threads zu überwachen. Ich muss mehr über das Thema lesen, es ist ziemlich komplex. –

Verwandte Themen