我的代码中的信号量有问题。
这是我构建的结构:
struct PipeShm
{
// doesn't matter
sem_t *mutex;
int init;
// more fields
};
在这里我初始化结构:
struct PipeShm myPipe ;
myPipe.mutex = NULL;
myPipe.init = 0;
我使用初始化方法:
int initMethod()
{
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))
{
myPipe.init = TRUE;
}
else
perror ("initMethod");
}
return 1;
}
这是一个使用上述内容的简单 main :
int main()
{
int spd, pid, rb;
char buff[4096];
shm_pipe_init();
fork();
// more code goes here
return 0;
}
在这条线上fork();
(如果我错了,请纠正我)2
进程会有两个不同的信号量,对吧?
如果是这样,我想制作一个全局信号量。那可能吗?
由于我的代码中存在同步问题,我怀疑主要原因是每个创建的进程都有双信号量。