linux 程序 訊號量

2021-10-04 13:11:09 字數 2070 閱讀 6186

1. 概述:

該demo主要實現linux下程序之間訊號量的使用, 相關介面介紹可以參考<2. 測試:

程序程式設計demo(訊號量)

ipc相關的命令: ipcs ipcrm(釋放ipc)

檢視程序屬性: ulimit -a

*/#include

#include

#include

#include

#include

#include

#include

/*標頭檔案 sem.h 把 union semun 宣告注釋掉了

*/union semun ;/*

二元訊號量操作

*/static

intsemctl_init

(int semid)

;static

void

semctl_deit

(int semid)

;static

intsemop_down

(int semid)

;static

intsemop_up

(int semid)

;#define sem_id 1

intmain

(int argc,

char

**ar**)

ret =

semctl_init

(semid);if

(ret <0)

pid =

fork()

;if(pid <0)

else

if(pid ==0)

printf

("child process\t start\n");

sleep(1

);printf

("child process\t stop\n");

ret =

semop_up

(semid);if

(ret <0)

}else

printf

("parant process\t start\n");

sleep(1

);printf

("parant process\t stop\n");

ret =

semop_up

(semid);if

(ret <0)

wait

(null);

semctl_deit

(semid);}

return0;

}/*初始化訊號量

*/static

intsemctl_init

(int semid)

return0;

}/*刪除訊號量

*/static

void

semctl_deit

(int semid)}/*

獲取訊號量資源

*/static

intsemop_down

(int semid)

return0;

}/*釋放訊號量資源

*/static

intsemop_up

(int semid)

return0;

}

#makefile

cc :

= gcc

include =

-i /home/demo/include/

all:

$(cc) demo_process_ipc_semget.c $(include)

-o demo_process_ipc_semget -wall -werror

clean:

rm demo_process_ipc_semget

Linux程序通訊 訊號量

主要用於程序對共享資源的互斥訪問。為了取得對乙個共享資源,程序測試訊號量的值,如果為正,表示還有資源可以訪問,該程序對訊號量加減一。如果為0表示沒有資源可以用,該程序應當休眠等待訊號量的值再次為正。linux中的訊號量使用起來是比較麻煩的。在這裡,訊號量是以集合形式存在的,建立時要給出訊號量的數目,...

Linux程序通訊 訊號量

訊號量是乙個核心變數,它可以被系統中的任何程序所訪問。程序間可以使用這個變數來協調對於共享記憶體和其他資源的訪問。如果不刪除訊號量,它將繼續在系統中存在,即使程式已經退出,它可能在你下次執行此程式時引發問題,而且訊號量是一種有限的資源。簡單的例子 父程序與子程序共享印表機,必須其中一者列印完後,另一...

Linux 程序通訊 訊號量

基本概念 訊號量和p,v 原語 訊號量 訊號量值的含義 訊號量結構偽 訊號量的本質是乙個計數器 struct semaphore p原語 p s v原語 v s 訊號量有關函式 建立或開啟訊號量 設定初值 銷毀訊號量 union semun union senun su su.val 1 檢視訊號量...