プログラムではなくライブラリを作成しているので、セマフォであるグローバル静的変数があります。
ライブラリを使用するプログラム内には、共有メモリに基づいて、のmain()
呼び出し、およびパイプへの読み取りとパイプからの書き込みがあります。fork()
たとえば、これはmain()
私のライブラリを使用しています:
#include <stdio.h>
#include <stdlib.h>
#include "my_pipe_shared_memory_based.h"
int main()
{
int spd, pid, rb;
char buff[4096];
my_new_init();
if (my_new_fifo("tmp_shm_pipe",0666) < 0)
{
perror("my_new_fifo");
exit(1);
}
if (fork())
{
spd = my_new_open("tmp_shm_pipe", O_RDONLY, 0600);
if (spd < 0)
{
perror("PARENT: my_new_open");
exit(1);
}
rb = my_new_read(spd, buff, sizeof(buff));
if (rb > 0)
write(1, buff, rb);
}
else
{
spd = my_new_open("tmp_shm_pipe", O_WRONLY, 0600);
if (spd < 0)
{
perror("SON: my_new_open");
exit(1);
}
my_new_write(spd, "hello world!\n", sizeof("hello world!\n"));
}
my_new_close(spd);
my_new_un_link("tmp_shm_pipe");
my_new_finish();
return 0;
}
ここで、プロセスがメソッドで読み取りおよび/または書き込みを行うたびに、セマフォを使用したいと思います。
my_new_write()
my_new_read()
my_new_write
さて、質問は、上記の要求されたメソッド(たとえば& )で毎回セマフォの状態を確認する方法my_new_read
です。別のプロセスが現在読み取り/書き込みを行っている場合は、プロセスに彼のことを実行させるか、ブロックすることができますか?
ありがとう