Linux(Semaphore)

Semaphore(System V)

目前 Semaphore 有兩種版本 1.POSIX 2.System V

以下為 System V 範例

System V Sem 流程如下

1.Create Sem

2.不同 Process 取得 Sem

3.取得 Sem 後執行 P() FUNC,等於拿走 Sem,其他 Process 只能等

4.執行完 Critical Section 後執行 V() FUNC,釋放 Sem

舉例

範例檔案

1
2
3
4
./CreateSem
./Proc1 &
./Proc2 &
./Proc3 &

在 Linux 當中看有哪些 Sem,其他 以建立

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# ipcs -s
------ Semaphore Arrays --------
key semid owner perms nsems
0x00000400 0 root 666 1

# 刪除 Semaphore
# ipcrm -s 0x400

# ipcs -l -s

------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767

# ipcs -s -i 32768

Semaphore Array semid=32768
uid=0 gid=0 cuid=0 cgid=0
mode=0666, access_perms=0666
nsems = 1
otime = Not set
ctime = Wed Dec 31 22:54:05 1969
semnum value ncount zcount pid
0 0 3 0 0

參考

參考-1

參考-2

參考-3

參考-4

參考-5

參考-6