2010-09-30 27 views
6

Necesito hacer alguna sincronización de proceso en C. Quiero usar un monitor, y he leído mucho sobre ellos. Sin embargo, no he podido averiguar cómo implementar uno en C. Los he visto hacer en Java y en otros lenguajes como C++, pero no puedo encontrar ejemplos en C.¿Cómo puedo codificar un monitor en C?

He consultado a través de K & R y no hay ningún ejemplo allí. Revisé en Unix Systems Programming, Communication, Concurrency and Threads, pero no pude encontrar una implementación de monitor allí.

Esto me trae aquí. ¿Dónde y cómo puedo definir un monitor? ¿Cómo lo implemento dentro del resto del código?

/* Estoy de codificación en un entorno * nix */

Respuesta

5

lo hice recientemente para un proyecto, el concepto implementé era tener un hilo empezar todo de los demás y luego usar semáforos y exclusiones mutuas con el control los problemas de sincronización entre procesos al tratar con la memoria compartida.

El concepto de monitor, en el contexto del patrón de diseño del monitor, es una construcción que básicamente está ahí para ocultar la excusa mutua. Este concepto se expresa en C++ Boost pero no existe en el núcleo C++ o C. La forma en que manejas este tipo de trabajo en C es con mutexes (semáforos binarios) y semáforos bien pasados ​​de moda. Puede leer más sobre esto here.

A continuación se muestra una forma básica de inicializar un semáforo y mutex, puede que necesite leer algo sobre cómo y cuándo usar cada uno de ellos ya que es un poco largo para cubrir aquí, pero here es un enlace para obtener tú empezaste.

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

¿Esta implementación es a través de una función? He visto un código menor como: supervisar el código de la red {/ * aquí * /}. ¿Fue ese pseudo código o hay una estructura de palabra clave/datos para los monitores también? –

+0

Noqueé esa función de monitor que tenía y la reemplacé con una respuesta más directa. Si quieres que me devuelvas el código solo avísame, simplemente volví a leer tu pregunta y vi que no era exactamente lo que estabas preguntando. En su comentario anterior, ese código al que se refiere es pseudocódigo, a mi leal saber y entender, ese constructo no existe en C. – JonVD

+0

Gracias, creo que intentaré implementar el mío a través de una función con semáforos en main e intentaré Úselo para monitorear varios hilos. Necesito leer más sobre el tema, es bastante complejo. –

Cuestiones relacionadas