在我的代码做以下初始化:当两个进程试图访问信号量为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