Я пытаюсь сделать семафор видимым для нескольких процессов после форкирования. Это проблема столового философа, использующая разделяемую память и семафор, чтобы гарантировать, что только один философ забирает палочки для еды за один раз (не самый эффективный способ, массив семафоров будет более эффективным, но это не главное). Он переходит к циклу while внутри начала, распечатывая его, но ни один из процессов не вводит оператор if каким-либо процессом. Глобальный охват: int semId;
Ввод семафора в общую память C
Inside my main:
semId=semget(IPC_PRIVATE,1,S_IRUSR|S_IWUSR);
for(int i =0; i<5; i++)
if(fork()==0)
start(i);
void start(int philNo){
struct sembuf semWait[1]={{0,-1,0}};
struct sembuf semSignal[1] = {{0,1,0}};
while(philArr[philNo].stomach<100){
printf("entered while\n");
//see if the semaphore is available
if (semop(semId,semWait,1)==0)
{
printf("semaphore available/n");
}
Полный код доступен здесь: http://pastie.org/10054082 Есть нечто, объявленное на глобальном, что не должно быть, но это будет очищено, как только я получить работу
Ваш код не подлежит компиляции. '' Start() 'принимает параметр' int' или нет? –
@CareyGregory Да, это так, извините, исправлено – CodeMonkey
Семафор начинается со счета 0. Поэтому кто-то должен «semSignal», чтобы получить мяч. Я положил 'semSignal' в' main' после цикла, который 'forks' детей, и это позволило детям получить семафор. – user3386109