第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有無了解linux 信號量操作函數(shù)的大佬!

有無了解linux 信號量操作函數(shù)的大佬!

梵蒂岡之花 2021-09-20 14:10:54
down, up, sem_p, sem_v, sem_wait, sem_post. 有什么區(qū)別undefined reference to `down' ,需要包含哪個頭文件?
查看完整描述

2 回答

?
慕容森

TA貢獻1853條經(jīng)驗 獲得超18個贊

semget()
可以使用系統(tǒng)調(diào)用semget()創(chuàng)建一個新的信號量集,或者存取一個已經(jīng)存在的信號量集:
系統(tǒng)調(diào)用:semget();
原型:intsemget(key_t key,int nsems,int semflg);
返回值:如果成功,則返回信號量集的IPC標識符。如果失敗,則返回-1:errno=EACCESS(沒有權(quán)限)
EEXIST(信號量集已經(jīng)存在,無法創(chuàng)建)
EIDRM(信號量集已經(jīng)刪除)
ENOENT(信號量集不存在,同時沒有使用IPC_CREAT)
ENOMEM(沒有足夠的內(nèi)存創(chuàng)建新的信號量集)
ENOSPC(超出限制)
系統(tǒng)調(diào)用semget()的第一個參數(shù)是關(guān)鍵字值(一般是由系統(tǒng)調(diào)用ftok()返回的)。系統(tǒng)內(nèi)核將此值和系統(tǒng)中存在的其他的信號量集的關(guān)鍵字值進行比 較。打開和存取操作與參數(shù)semflg中的內(nèi)容相關(guān)。IPC_CREAT如果信號量集在系統(tǒng)內(nèi)核中不存在,則創(chuàng)建信號量集。IPC_EXCL當和 IPC_CREAT一同使用時,如果信號量集已經(jīng)存在,則調(diào)用失敗。如果單獨使用IPC_CREAT,則semget()要么返回新創(chuàng)建的信號量集的標識 符,要么返回系統(tǒng)中已經(jīng)存在的同樣的關(guān)鍵字值的信號量的標識符。如果IPC_EXCL和IPC_CREAT一同使用,則要么返回新創(chuàng)建的信號量集的標識 符,要么返回-1。IPC_EXCL單獨使用沒有意義。參數(shù)nsems指出了一個新的信號量集中應(yīng)該創(chuàng)建的信號量的個數(shù)。信號量集中最多的信號量的個數(shù)是 在linux/sem.h中定義的:
#defineSEMMSL32/*<=512maxnumofsemaphoresperid*/
下面是一個打開和創(chuàng)建信號量集的程序:
intopen_semaphore_set(key_t keyval,int numsems)
{
intsid;
if(!numsems)
return(-1);
if((sid=semget(mykey,numsems,IPC_CREAT|0660))==-1)
{
return(-1);
}
return(sid);
}
};
==============================================================
semop()
系統(tǒng)調(diào)用:semop();
調(diào)用原型:int semop(int semid,struct sembuf*sops,unsign ednsops);
返回值:0,如果成功。-1,如果失敗:errno=E2BIG(nsops大于最大的ops數(shù)目)
EACCESS(權(quán)限不夠)
EAGAIN(使用了IPC_NOWAIT,但操作不能繼續(xù)進行)
EFAULT(sops指向的地址無效)
EIDRM(信號量集已經(jīng)刪除)
EINTR(當睡眠時接收到其他信號)
EINVAL(信號量集不存在,或者semid無效)
ENOMEM(使用了SEM_UNDO,但無足夠的內(nèi)存創(chuàng)建所需的數(shù)據(jù)結(jié)構(gòu))
ERANGE(信號量值超出范圍)
第一個參數(shù)是關(guān)鍵字值。第二個參數(shù)是指向?qū)⒁僮鞯臄?shù)組的指針。第三個參數(shù)是數(shù)組中的操作的個數(shù)。參數(shù)sops指向由sembuf組成的數(shù)組。此數(shù)組是在linux/sem.h中定義的:
/*semop systemcall takes an array of these*/
structsembuf{
ushortsem_num;/*semaphore index in array*/
shortsem_op;/*semaphore operation*/
shortsem_flg;/*operation flags*/
sem_num將要處理的信號量的個數(shù)。
sem_op要執(zhí)行的操作。
sem_flg操作標志。
如果sem_op是負數(shù),那么信號量將減去它的值。這和信號量控制的資源有關(guān)。如果沒有使用IPC_NOWAIT,那么調(diào)用進程將進入睡眠狀態(tài),直到信號 量控制的資源可以使用為止。如果sem_op是正數(shù),則信號量加上它的值。這也就是進程釋放信號量控制的資源。最后,如果sem_op是0,那么調(diào)用進程 將調(diào)用sleep(),直到信號量的值為0。這在一個進程等待完全空閑的資源時使用。



查看完整回答
反對 回復(fù) 2021-09-23
?
一只斗牛犬

TA貢獻1784條經(jīng)驗 獲得超2個贊

down和up函數(shù)在內(nèi)核源代碼的semaphore.h里。
你可以看一下/usr/src/內(nèi)核的版本/include/linux里的源文件。
引入linux/semaphore.h,注意鏈接路徑的環(huán)境變量要設(shè)對。

sem_p和sem_v沒聽說過,不過down和up分別對應(yīng)的就是p和v,估計沒什么區(qū)別,可能是新版本里的吧。

sem_wait和sem_post也是對應(yīng)p和v,但它們不是linux內(nèi)核庫中的,是GNU C庫里的,可以去/usr/include下看頭文件。直接引入semaphore.h即可。

down和up操作的是linux內(nèi)核里的信號量。
而sem_wait和sem_post應(yīng)該遵循POSIX標準的,在編寫多線程程序時,操作用戶進程里的信號量,在其他操作系統(tǒng)中也有。



查看完整回答
反對 回復(fù) 2021-09-23
  • 2 回答
  • 0 關(guān)注
  • 335 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號