我正在尝试将 C 中的 System V 信号量用于实验室,但我的课程对我没有帮助。
我可以创建我的信号量并将其删除(使用 semget() 和 semctl()),但我不能与之交互:它的值始终保持不变 (0),并且当我问它时它不会做它的信号量工作到(使用 semop())。
顺便说一句,我在下面提取了我已经写过的关于我的信号量的代码:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int main()
{
// some code
int sem;
struct sembuf up = {0,1,0};
struct sembuf down = {0,-1,0};
sem = semget(IPC_PRIVATE, 1, 777 | IPC_CREAT);
// Tried with 777 because why not. Originally at 600
// but it gave me a "Permission denied" error.
semop(sem, &up, 1); // up
// some critical code
semop(sem, &down, 1); // ... and down
semctl(sem, 0, IPC_RMID); // deletion
}
有人知道我的代码中缺少什么来使我的信号量工作吗?
注意:不,我不能使用 POSIX 信号量。是的,我知道这很可悲。