未完,待續...
【摘要】
本文將從乙個例項出發,逐步剖析linux核心是如何實現訊號量機制的.
【正文】訊號量使用例項
1 訊號量建立例項
void sem_create_test(void)
int key_fd,key_value;
int sem_id;
union semun sem_args;
unsigned short array[2]=;
key_fd = open("/mnt/key",o_rdwr|o_create,s_iread|s_iwrite);
if(key_fd < 0)
close(key_fd);
key_value = ftok("/mnt/key",1);
printf("key = 0x%x\n",key_value);
/* 建立2個訊號量,這兩個訊號量key_t值都是key_value,id都是sem_id */
sem_id = semget(key_value,2,ipc_create|0660);
初始化上面建立的id為sem_id的2個訊號量的值為array[0],array[1];
其中setall和1表示要設定2個訊號量 ;此處也可以使用setval對每個訊號量分別初始化sem_args.val.
sem_args.array = array;
semctl(sem_id,1,setall,sem_args);
【其他】
檢視系統中訊號量:
cat /proc/sysvipc/sem
key_value = ftok("/mnt/key",1);
printf("key = 0x%x\n",key_value);
/* 建立2個訊號量,這兩個訊號量key_t值都是key_value,id都是sem_id */
sem_id = semget(key_value,2,ipc_create|0660);
初始化上面建立的id為sem_id的2個訊號量的值為array[0],array[1];
其中setall和1表示要設定2個訊號量 ;此處也可以使用setval對每個訊號量分別初始化sem_args.val.
sem_args.array = array;
semctl(sem_id,1,setall,sem_args);
【其他】
檢視系統中訊號量:
cat /proc/sysvipc/sem
linux核心鎖機制
核心鎖的討論 為什麼需要核心鎖?多核處理器下,會存在多個程序處於核心態的情況,而在核心態下,程序是可以訪問所有核心資料的,因此要對共享資料進行保護,即互斥處理 有哪些核心鎖機制?1 原子操作 atomic t資料型別,atomic inc atomic t v 將v加1 原子操作比普通操作效率要低,...
IPC機制和實現
1 管道 pipe 管道可用於具有親緣關係程序間的通訊,允許乙個程序和另乙個與它有共同祖先的程序之間進行通訊。2 命名管道 named pipe 命名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。命名管道在檔案系統中有對應的檔名。命名管道通過命令mkf...
RTT的IPC機制篇 IPC通訊總結
總結1 rtt通訊方式總結 2018年12月29日 10 47 ipc inter process communication 1,rtt的通訊機制 訊息佇列 郵箱 訊號量 互斥量 事件。2.我又按照其傳輸的內容分為 資料類和非資料類通訊。非資料類,執行緒間 執行緒與中斷傳輸非資料類資訊,實現執行緒...