1、急!LINUX下,GCC編譯,原程序包含<semaphore.h>頭文件,為什麼編譯時說sem_wait,sem_post等未定義的引用
編譯時加上參數:-lpthread
要看報錯的階段,是在編譯還是鏈接階段.
如果編譯時函數沒有找到,那是頭文件的問題,如果鏈接時未定義引用,那是c庫的問題.
如果你的頭文件都正常包含了,那可能你的c庫沒有使能semaphore的支持.
2、linux/sem.h和sys/sem.h有什麼區別
你好。
不只是sem.h,很多頭文件都有/usr/include/linux和/usr/include/sys兩個版本。
我的印象是:linux目錄裡面的頭文件用於內核,
sys目錄裡面的頭文件用於應用程序或者glibc標准庫
如果我的回答沒能幫助您,請繼續追問。
3、清華版操作系統 管程章節學習中的疑問
signal也是管程操作的一部分,你當然可以理解為在上述那種情況下,AB是同內在管程之中的,容但我並不認為這有任何問題,因為管程的定義是:
「一個管程定義了一個數據結構和能為並發進程所執行(在該數據結構上)的一組操作,這組操作能同步進程和改變管程中的數據」
注意管程中的諸操作本身就是就是為了多個進程並發執行而設計的,換句話說,這些操作與方法已經經過了良好的定義,使得即使多個進程同在管程之中操作對應的資源,也可以保證資源的訪問是有序而不會發生任何沖突的(這正是管程的意義所在)。所以我認為盡管你可以這樣理解,但是這種情況也是不會有任何問題的。
有問題歡迎繼續討論
4、linux下sem多大值會溢出sem
一、你是抄想問:sem隊列的最大深度嗎?
int semget(key_t key, int nsems, int semflg);
nsems must be greater than 0 and less than or equal to the maximum number of semaphores per semaphore set (SEMMSL).
#define SEMMSL 250 /* <= 8 000 max num of semaphores per id */
semget的最大隊列深度為250
二、你想問的是sem id的最大值
/* Maximum value the semaphore can have. */
#define SEM_VALUE_MAX (2147483647)