在我的代碼做以下初始化:當兩個進程試圖訪問信號量爲0的臨界區時會發生什麼?
struct PipeShm myPipe = { .init = 0 , .flag = FALSE , .mutex = NULL , .ptr1 = NULL , .ptr2 = NULL ,
.status1 = -10 , .status2 = -10 , .semaphoreFlag = FALSE };
int initPipe()
{
if (!myPipe.init)
{
myPipe.mutex = mmap (NULL, sizeof *myPipe.mutex, PROT_READ | PROT_WRITE,MAP_SHARED | MAP_ANONYMOUS, -1, 0);
if (!sem_init (myPipe.mutex, 1, 0)) // semaphore is initialized to 0
{
myPipe.init = TRUE;
}
else
perror ("initPipe");
}
return 1; // always successful
}
我可以有可以從main()
調用多個進程(注意叉)。
謝謝
您正在調用'fork()'兩次:一次在開始時,一次在if條件時 – knittl 2012-07-29 09:19:28
@knittl:好的,那有什麼問題?這是有意地完成的 – ron 2012-07-29 09:20:05
你最後有4個進程(父和子都是fork())。來自第二個分支('if(fork())')的進程將分別具有原始信號量的獨特副本。 – knittl 2012-07-29 09:22:01