Im пытается узнать семафоры и как они работают между процессами, поэтому я хотел создать программу, которая печатает в 10 раз строку «abcd» из двух отдельных циклов for(). Один для() содержит строку «ab», а в другой - «cd». Я думал, что код в порядке, но, видимо, его нет. Я был бы признателен, если бы вы могли указать на что-то не так, или если у меня что-то не понято.Семафоры POSIX между дочерними и родительскими процессами
Вот код:
int main(void)
{
int i;
char *p;
sem_t *sem; //First semaphore
sem_t *sem2; //Second semaphore
//create, initialize semaphores
sem = sem_open("/semaphore1", O_CREAT, 0644, 1);
sem2 = sem_open("/semaphore2", O_CREAT, 0644, 1);
if (fork()) //Child process
{
for (i=0;i<10;i++)
{
sem_wait(sem2); //Lock the semaphore
for (p="ab"; *p; p++)
{
write(1, p, 1);
usleep(100);
}
sem_post(sem); //Release the semaphore lock
}
wait(NULL);
}
else //Parent process
{
for (i=0;i<10;i++)
{
sem_wait(sem); //Lock the semaphore
for (p="cd\n"; *p; p++)
{
write(1, p, 1);
usleep(100);
}
sem_post(sem2); //Release the semaphore lock
}
}
//Close the Semaphores
sem_close(sem);
sem_unlink("/semaphore1");
sem_close(sem2);
sem_unlink("/semaphore2");
return 0;
}
И один из выходов:
abcd
cadb
cadb
cadb
cabd
cabd
cabd
cadb
cabd
cadb
Вы должны инициализировать один из семафоров с нуля, а не как с одной. –
@JonathanLeffler Спасибо! это очень помогло! –