UNIX 信号量与共享内存实用程序详解
1. 信号量操作基础
1.1 信号量等待与通知
首先,打开第二个终端会话,尝试以下信号量等待操作:
$ x/semop -k0xFEEDF00D -a -o 0=-6,1=-4 -G
-a 0xFEEDF00D => IPC ID 196608
There are 3 semaphores in this set.
如果信号量的值与之前的示例匹配,这个实用程序会在此处挂起。这是因为请求从信号量 1 获取 4 个资源,但当前计数仅为 3。在应用程序等待时,在另一个终端会话中执行以下命令:
$ ./semop -k0xFEEDF00D -a -o 1=+2
-a 0xFEEDF00D => IPC ID 196608
There are 3 semaphores in this set.
-o 1=+2 => { 1,+2,0}
当此命令执行时,信号量 1 被通知增加 2,计数从 3 变为 5,满足了之前的请求,等待的进程能够成功从 semop(2)
返回:
$ ./semop -k0xFEEDF00D -a -o 0=-6,1=-4 -G
-a 0xFEEDF00D => IPC ID 196608
There are 3 semaphores in this set.