Я пытаюсь использовать семафоры System V в C для лаборатории, но мои курсы мне не помогают.
Я могу создать свой семафор и удалить его (используя 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
}
Кто-нибудь знает, чего не хватает в моем коде, чтобы заставить мой семафор работать?
NB: Нет, я могу ' t использовать семафоры POSIX. Да, я знаю, это грустно.