I created and initialized System V semaphores with semget()
and semctl()
in the main function, but the semop()
function is called in a different function. I simply passed the ids of the semaphores as parameters to that function. It looks something like this:
int manageProcesses(int* data, int* numProcesses, int semId, int mutex, int time)
{
semop(mutex, &semwait, 1);
...
}
Does this work or should semop()
be called in the same function as semget()
and semctl()
?
CodePudding user response:
Does this work or should
semop()
be called in the same function assemget()
andsemctl()
?
The id of a semaphore set, as obtained from semget()
, is a process-scoped handle on an object (the semaphore set) with kernel persistence. Once you obtain one, you can use that anywhere in the program in conjunction with semctl()
and / or semop()
, until and unless you remove the semaphore set via semctl(..., IPC_RMID)
, or some other process removes it.