[英]Semaphore access patterns in C/C++ (Linux)
我對存儲/使用信號量的最佳方法感到好奇。
以前,我一直使用存儲在共享內存中的信號量(因為無論如何我已經在使用共享內存)作為sem_t
,然后使用sem_init()
, sem_wait()
, sem_timedwait()
和sem_post()
來操作信號量。
但是今天,我閱讀了man
頁,並開始查看sem_get()
, sem_ctl()
等...我認為這將是節省聲明共享內存以獲取信號量的好方法。 在開始編寫代碼時,我意識到我找不到從sem_get()
到sem_t
。
如果我利用shm_get()
只有我能夠手動操作與信號燈sem_ctl()
這需要用sem_wait()
, sem_timedwait()
和sem_post()
掩蓋的大量開銷。
當您只有類型為key_t
的變量時,是否可以獲取類型為sem_t
的變量?
深入閱讀后 ,大多數Linux發行版中都有兩種類型的信號量; 系統V和POSIX 。 簡而言之, System V本身就是一個非常出色的工具,也許是“粗暴”的工具,而POSIX則更易於使用。
我的問題源於我以前沒有意識到二分法的事實。 sem_t
及其友好的工具來自POSIX家族,而shmget()
和shmctl()
來自System V家族-它們不兼容,並且兩者之間沒有“現成的”可能。
我正在尋找的解決方案是sem_open()
和sem_close()
。 這允許使用char *name = "named_semaphore";
來識別信號量,然后信號量返回變量sem_t
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.