[英]Isn't there a function like sem_wait in System V Semaphore?
我正在制作一種方式的聊天程序。 但是在客戶端程序中,它運行得非常快,所以它向我顯示了很多文本。 所以我正在使用 System V 信號量,但它不能使用 sem_wait 我應該使用 POSIX 信號量來像 sem_wait 一樣使用嗎?
我寫不出來睡覺了。 因為我要單獨發送大量文件。
是的,有...但是當您將信號量減到 0 以下時會發生這種情況。Sys V 信號量是 Dijkstra 信號量的一種變體,您可以在其中以原子方式對一組信號量進行排序操作,因此您如果其中任何一個阻塞您請求的操作,將等待。 正如您可能知道的那樣,當您將信號量的值減小到 0 以下時,信號量會等待(阻塞),並且只有當它再次高於 0 時,它才允許阻塞的進程通過。 在 SysV 中,您對單個信號量下令遞增或遞減(如果您只處理一個,並且只遞減一個,則該操作將等效於 P() Dijkstra 的調用,而如果您按 N 執行此操作,則該操作將等於按順序對 P() 的 N 次調用(並且原子地,由 Unix 內核保證)增量操作等效於 V() Dijkstra 的調用,並且也以原子方式完成。kernel 還保持凈額 a進程已經對信號量進行了操作,以便撤消該進程對信號量所做的所有操作,以防該進程死亡。
我希望這已經回答了你的問題。
在 System V IPC 信號量集上運行的 function 是semop()
。 如果信號量集有多個成員,它可以在單個調用中執行等待和信號操作。
macOS 手冊說:
#include <sys/sem.h> int semop(int semid, struct sembuf *sops, size_t nsops);
描述
semop()
系統調用在semid
指示的信號量集上以原子方式執行由sops
指示的操作數組。sops
的長度由nsops
指示。 每個操作都編碼在struct sembuf
中,定義如下:struct sembuf { u_short sem_num; /* semaphore # */ short sem_op; /* semaphore operation */ short sem_flg; /* operation flags */ };
它繼續詳細說明行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.