System V 信号量 - 不同函数中的 semop()

System V Semaphores - semop() in different function

我在 main 函数中使用 semget()semctl() 创建并初始化了 System V 信号量,但是在另一个函数中调用了 semop() 函数。我只是将信号量的 ID 作为参数传递给该函数。它看起来像这样:

int manageProcesses(int* data, int* numProcesses, int semId, int mutex, int time)
{
    semop(mutex, &semwait, 1);
    ...
}

这行得通吗?还是应该 semop() 在与 semget()semctl() 相同的函数中调用?

Does this work or should semop() be called in the same function as semget() and semctl()?

semget() 获得的信号量集的 ID 是具有内核持久性的对象(信号量集)的 process-scoped 句柄。一旦你获得一个,你就可以在程序的任何地方与 semctl() 和/或 semop() 一起使用它,直到并且除非你通过 semctl(..., IPC_RMID) 删除信号量集,或者其他一些进程删除它。