Quiero consultar si me pueden ayudar a construir un semáforo en c, o darme los pasos principales para esto.
1 Respuesta
Respuesta de drazer
1
1
drazer, Estudiante de Ingenieria Informatica, con nivel alto de ingles
Espero que esto le sirva: Supongo que conoce perfectamente la teoría de sincronización de procesos, y lo relacionado, como los semáforos en este caso, así que voy al grano. Los semáforos son tipos abstractos de datos, implementados dentro del sistema Operativo, y cuyas operaciones de acceso son llamadas al sistema. Una posible implementación del tipo sería como un registro, con dos campos: * Un contador entero * Una cola de punteros a los PCBs de los procesos que están en cada momento Suspendidos en el semáforo Definición de ejemplo: typdef struct semaforo { int contador; PCB *cola; } semaforo; Le voy a explicar como usar los semáforos en C con el estándar POSIX. #include <semaphore.h> //libreria sem_t sem; //declaracion del tipo de dato Operaciones: int sem_init(sem_t *sem, int pshared, unsigned int value); int sem_destroy(sem_t *sem); int sem_wait(sem_t *sem); int sem_trywait(sem_t *sem); int sem_post(sem_t *sem); int sem_getvalue(sem_t *sem, int *sval); En cualquier manual POSIX y/o de UNIX podrá ver la especificación detallada de cada función y de muchas más. También existen otro tipo de "objeto" para sincronizar procesos, pero que a diferencia de los semáforos, sólo permite que un proceso se suspenda, y son los "mutex".