[英]How to lock a PIPE (or FIFO) with multiple reading processes?
如何通過多個讀取過程鎖定PIPE(或FIFO)?
您可以在管道描述符上使用文件鎖:
flock(2)
(在POSIX中指定); fcntl(2)
“咨詢記錄鎖定”部分以及lockf(3)
包裝器(均在POSIX中指定); fcntl(2)
(特定於Linux,在最新內核中可用)。 您也可以使用POSIX信號量或其他IPC,但是隨后需要單獨的文件描述符。
但是,在您的情況下,您實際上並不需要這樣做,因為您可以在一個調用中寫入和讀取兩個整數,這將是原子的,如注釋中所述。
如果緩沖區大小不大於PIPE_BUF
則寫入和讀取在管道上是原子的。 參見write(2)
:
嘗試寫入管道或FIFO具有幾個主要特征:
- 原子/非原子:如果一個操作中寫入的總量未與任何其他進程的數據交錯,則寫入是原子的。 當有多個作者將數據發送到單個讀者時,此功能很有用。 應用程序需要知道可以自動執行多大的寫請求。 此最大值稱為{PIPE_BUF}。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.