我試圖學習信號量以及它們如何在進程之間工作,所以我想創建一個程序,從兩個單獨的for()循環打印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謝謝!這非常有幫助! –