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