Zdravim,
mam problem se semaforem.
Mam program server klient. Server se rozforkuje na x procesu, ktere resi registraci nebo login svych uzivatelu. Vsechny procesy k tomu potrebuji pristupovat k souboru registrace.txt. Vytvoril jsem semafor. Kdyz dam jeden proces pozastavit uprostred registrace resp. zapisu do souboru registrace.txt, tak ostatni procesy, ktere chteji vstoupit se do souboru se zastavi. Kdyz pak prvni proces necham pokracovat a dokoncit zapis, tak se mi ale ostatni pozastavene procesy neprobudi a nepokracuji....
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include "my_semaphore.h"
/* Zamčení zámku */
void lock(int semid)
{
struct sembuf sb;
sb.sem_num = 0;
sb.sem_op = -1; /* operace P */
sb.sem_flg = SEM_UNDO; /* vrátit operaci při skončení procesu */
if(semop(semid, &sb, 1)) {
perror("semop(-1)");
exit(EXIT_FAILURE);
}
}
/* Odemčení zámku */
void unlock(int semid)
{
struct sembuf sb;
sb.sem_num = 0;
sb.sem_op = 1; /* operace V */
sb.sem_flg = SEM_UNDO; /* vrátit operaci při skončení procesu */
if(semop(semid, &sb, 1)) {
perror("semop(1)");
exit(EXIT_FAILURE);
}
}