1
我在代碼中遇到信號量問題。是否有可能爲所有進程創建全局信號量?
這是我建立一個結構:
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;
}
這是一個簡單的主要使用以上:
int main()
{
int spd, pid, rb;
char buff[4096];
shm_pipe_init();
fork();
// more code goes here
return 0;
}
在行fork();
(請糾正我,如果我錯了)2
進程將 有兩個不同的信號量,對不對?
如果是這樣,我想做一個全球信號量。那可能嗎?
由於我的代碼中存在同步問題,我懷疑主要原因是每個創建的進程都有一個雙重信號量 。
是的,它被稱爲鎖文件 – tbert 2012-07-30 18:32:28
@tbert:我不能使用(文件,我的意思是) – ron 2012-07-30 18:34:01
那麼你可能想看看你的手冊頁,因爲「man sem_init」導致我「sem_open」,其中說:「sem_open()函數建立一個命名信號量和進程之間的連接」,這看起來就像你在這裏試圖做的。 – tbert 2012-07-30 18:37:34