Linux內核信號量集用結構體semid_ds結構體表示,semid_ds的結構體定義如下:
/* Data structure describing a set of semaphores. */struct semid_ds{ struct ipc_perm sem_perm; /* operation permission struct */ __time_t sem_otime; /* last semop() time */ __syscall_ulong_t __glibc_reserved1; __time_t sem_ctime; /* last time changed by semctl() */ __syscall_ulong_t __glibc_reserved2; __syscall_ulong_t sem_nsems; /* number of semaphores in set */ __syscall_ulong_t __glibc_reserved3; __syscall_ulong_t __glibc_reserved4;};
每個信號量則描述為:
struct sem{ int semval ; int sempid ; int semcnt ; int semzcnt;};
信號量的基本操作包括創建信號量、信號量的值操作、獲取或設置信號量屬性,對應的相關函數的分別是semget、semop、semctl。
1.創建信號量集
semget函數用于創建信號量,如果參數key指定的信號量集已經存在,則就返回該信號量集。
#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>int semget(key_t key, int nsems, int flag);
key:一個整數類型的鍵值,用來命名某個特定的信號量集。
nsems:指定打開或者新創建的信號量集包含的信號量數目。
falg:9個位的權限標志。
返回值:成功返回信號量集描述字,否則返回-1。
2.信號量值操作
信號量本質上是一個計數器,進程可以使用函數semop來增加或者減少信號量值,以表示釋放或者申請共享資源。
#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>int semop(int sem_id, struct sembuf * sops, unsigned int nsops);
sem_id:semget函數返回的信號量集描述字。
nsops:本次操作的信號量數目,也是sops指向的數組的大小。
sops:指向一個類型為sembuf的結構體數組。
sembuf結構體:
/* Structure used for argument to `semop' to describe operations. */struct sembuf{ unsigned short int sem_num; /* semaphore number */ short int sem_op; /* semaphore operation */ short int sem_flg; /* operation flag */};
如果sem_op為負數,就從信號量值中減去sem_op的絕對值,表示進程獲取資源;如果sem_op為正數,就把它加到信號量上,表示歸還資源;如果sem_op為0,則調用進程睡眠,直到信號量值為0。sem_flag一般設置為0。
3.獲取或者設置信號量屬性
系統中的每個信號量集都對應一個struct sem_ds結構體,該結構體記錄信號量集的各種信息,存放于內核空間。為了設置、獲取信號量集的各種信息及屬性,在用戶空間中有一個聯合體union semnu與之對應。
union semun { int val; /* Value for SETVAL */ struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ unsigned short *array; /* Array for GETALL, SETALL */ struct seminfo *__buf; /* Buffer for IPC_INF (Linux-specific) */};
信號量屬性操作的函數原型:
#include <linux/sem.h>int semctl(int semid, int semnum, int cmd,unionsemun arg);
semid:信號量集描述字。
semnum:待操作的信號量在信號集semid中的索引。
cmd:指定具體的操作類型,常見的操作有:
SETVAL:設置semnum所代表信號量的值為arg.val。
SETALL:通過arg.val更新所有信號量的值。
IPC_RMID:從內核主存中刪除信號量集。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
怎樣使ppt中的文字兩端都對齊,不用分散對齊?謝謝您的邀請通配符替換和文字轉換表功能很容易完成。只需幾個簡單的步驟,如圖所示:原文在第一個單詞后添加一個符號(我用“”),這個符號不會出現在單詞或譯文中。在“替換”對話框中,如圖所示輸入并設置。注意搜索內容第二個括號中的空格。如果文檔的空間為全角度,請輸入全角度空間和半角度空間。替換所有點后,每個單詞后的第一個空格將替換為。選擇所有文本,然后使用“插...
qq綠鉆和黃鉆區別?綠鉆和黃鉆的區別是:的綠鉆是指音樂給用戶提供的一些特權服務,黃鉆是空間的會員。不同的會員所對應的特權不同,綠鉆可以用來下載高質量音樂,黃鉆則可以給空間添加背景,裝飾,文字,等的美化還有其他的特權例如的vip和svip等,可以根據所需進行購買。黃鉆有什么用?有什么好處?開哪個鉆最劃來?騰訊的鉆都是各有功能的! 黃鉆主要是空間裝扮,皮膚等可以免費用,好處就是空間比普通用戶的弄得漂亮...
木門的十大品牌?1 .蒙田木門蒙恬木門成立于1989年,是木門行業的領導品牌。;的木門行業。它生產的各種木材質量優良,深受許多消費者的喜愛。2.塔塔木門塔塔門業成立于1999年,隸屬于北京億泰同創實業有限公司旗下品牌。amp這是一個最早從事研發的企業之一。amp在研發和生產室內門,具有卓越的品質和巨大的市場競爭力。3.展志天華木門展志天華是一家專注木業26年的大型家居建材企業。作為航天部門的合作伙...