2010-09-30 12 views
6

Ho bisogno di fare un po 'di sincronizzazione dei processi in C. Voglio usare un monitor, e ho letto molto su di loro. Tuttavia non sono riuscito a scoprire come implementare uno in C. Li ho visti fare in Java e in altri linguaggi come C++, ma non riesco a trovare esempi in C.Come posso codificare un monitor in C?

Ho guardato attraverso K & R e non c'è nessun esempio in là. Ho sfogliato la programmazione dei sistemi Unix, la comunicazione, la concorrenza e le discussioni, ma non sono riuscito a trovare un'implementazione del monitor.

Questo mi porta qui. Dove e come si definisce un monitor? Come posso implementarlo nel resto del codice?

/* sto codifica in un ambiente * nix */

risposta

5

ho fatto di recente per un progetto, il concetto ho implementato era quello di avere un filo avviare tutti gli altri e quindi utilizzare semafori e mutex al controllo l'inter processo sincronizza i problemi mentre si occupa della memoria condivisa.

Il concetto di monitor, nel contesto del modello di progettazione del monitor, è un costrutto che è fondamentalmente lì per nascondere l'escusione reciproca. Questo concetto è espresso in C++ Boost ma non esiste nel core C++ o C. Il modo in cui gestisci questo tipo di lavoro in C è con buoni mutex vecchio stile (semafori binari) e semafori. Puoi leggere ulteriori informazioni su questo here.

Di seguito è riportato un modo di base per inizializzare un semaforo e un mutex, potrebbe essere necessario leggere alcuni dati su come e quando utilizzare ciascuno di essi, poiché è un po 'lungo da coprire qui, ma here è un collegamento per ottenere hai iniziato tu.

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

Questa implementazione avviene tramite una funzione? Ho visto alcuni codici minori come: monitorare la rete {/ * codice e le condizioni qui * /}. Era quello pseudo codice o c'è anche una struttura parola/dati per i monitor? –

+0

Ho eliminato la funzione di monitoraggio che avevo e l'ho sostituita con una risposta più diretta. Se ti piace quel codice, fammelo sapere, ho solo riletto la tua domanda e ho visto che non era proprio quello che stavi chiedendo. Nel tuo commento sopra quel codice a cui ti riferisci è pseudo codice, per quanto sappia che il costrutto non esiste in C. – JonVD

+0

Grazie, penso che proverò a implementare il mio tramite una funzione con i semafori in main e provare a usalo per monitorare vari thread. Ho bisogno di leggere di più sull'argomento, è piuttosto complesso. –

Problemi correlati