簡體   English   中英

C / C ++(Linux)中的信號燈訪問模式

[英]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發行版中都有兩種類型的信號量; 系統VPOSIX 簡而言之, 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.

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