コードのセマフォに問題があります。
これは私が作成した構造体です:
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
プロセスには2つの異なるセマフォがありますよね?
もしそうなら、私はグローバルセマフォを作りたいです。それは可能ですか?
私のコードの同期の問題のため、主な理由は、作成された各プロセスの二重セマフォであると思われます。