我有两个进度,p1
和p2
,以及两个进度之间ipc的命名管道var
。
我想在var
写入时锁定p2
的{{1}} rw,并在p1
写完后解锁var
。
PS:
我使用select进行非阻止,因此当p1
向p2
添加任何内容时,p1
将变得可读。当var
完成时,我可以让var
变得可读写?
答案 0 :(得分:0)
您可以使用信号(例如SIGUSR1
)。编写器管道非阻塞(因此当管道变满时它不会阻塞),写入直到它不能再写入,然后将信号发送到另一个进程。读取过程读取所有(从其非阻塞管道),然后向写入者发送信号,然后写入者继续写入。
然而,这确实不需要。作者可以写,读者只读。如果管道变满,编写器将阻塞,直到它可以写更多。对于读者来说,如果没有什么可读的,它将会阻止。然后当编写器写入所有数据时,它将简单地关闭管道的末尾,读者将通过read
调用来检测,该调用返回零字节读取。