如果您想實現這種信號標存取方式(如果進行 ipc,通常需要這種方式),您可以做的一件事是建立共享記憶體,它只是一個整數。在行程之間使用此整數作為信號標的值。您可以編寫使用此功能的包裝函式,以允許您執行所需的讀寫器操作,或者直接使用共享記憶體。在這種情況下,我不太擔心競爭條件,因為共享記憶體只是一個整數。如果您擔心競爭條件,用於執行信號標操作的包裝函式實際上可以使用信號標來消除任何競爭條件。此外,這樣做的一個額外好處是您可以檢查整數的值。
(PHP 4, PHP 5, PHP 7, PHP 8)
sem_release — 釋放信號量
如果您想實現這種信號標存取方式(如果進行 ipc,通常需要這種方式),您可以做的一件事是建立共享記憶體,它只是一個整數。在行程之間使用此整數作為信號標的值。您可以編寫使用此功能的包裝函式,以允許您執行所需的讀寫器操作,或者直接使用共享記憶體。在這種情況下,我不太擔心競爭條件,因為共享記憶體只是一個整數。如果您擔心競爭條件,用於執行信號標操作的包裝函式實際上可以使用信號標來消除任何競爭條件。此外,這樣做的一個額外好處是您可以檢查整數的值。
sem_release 僅在信號標當前由呼叫行程獲取時才釋放信號標,這實際上是一個設計缺陷,因為有時(例如在讀寫器實現中)需要釋放由另一個行程獲取的信號標。在 C 語言中,您可以這樣做。
我之所以這樣說是因為我試圖用 php3 編寫一個由兩個程式組成的聊天應用程式:一個監聽器和一個發言器。發言器釋放一個信號標,以通知共享記憶體變數中有一條新訊息。監聽器在輸出訊息之前會等待該信號標。