Si je ne dis pas de connerie:
_KEY_ est de type pid_t
int SemCreate (void)
{
int idSem;
if( (idSem = semget(_KEY_, 1, IPC_CREAT|IPC_EXCL|0600)) != -1 )
{
return idSem;
}
return -1;
}
int SemDelete (int idSem)
{
return semctl(idSem, 0, IPC_RMID, 0);
}
int SemWait (int idSem)
{
struct sembuf SemOp;
SemOp.sem_num = _KEY_;
SemOp.sem_op = -1;
SemOp.sem_flg = SEM_UNDO; // pour ne pas blocker la ressource si CTRL+C
return semop(idSem, &SemOp, 1);
}
int SemSignal (int idSem)
{
struct sembuf SemOp;
SemOp.sem_num = _KEY_;
SemOp.sem_op = +1;
SemOp.sem_flg = SEM_UNDO; // pour ne pas blocker la ressource si CTRL+C
return semop(idSem, &SemOp, 1);
}
Je suis en train d'expérimenter les semaphores donc il est possible que je me trompe. Enfin j'espere que sa peut quand même aider.
|