簡體   English   中英

System V Semaphore中沒有像sem_wait這樣的function嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM