进程间通信:信号量、共享内存与消息队列详解
1. 信号量程序示例
1.1 示例输出
以下是程序两次调用的示例输出:
$ cc sem1.c -o sem1
$ ./sem1 1 &
[1] 1082
$ ./sem1
OOXXOOXXOOXXOOXXOOXXOOXXXXOOXXOOXXOOXXOOXXXX
1083 - finished
1082 - finished
$
这里,“O” 代表程序的第一次调用,“X” 代表第二次调用。由于每个程序在进入和离开临界区时都会打印一个字符,所以每个字符应该成对出现。从输出可以看出,“O” 和 “X” 确实正确配对,这表明临界区得到了正确处理。如果在你的系统上运行不正常,可能需要在调用程序之前使用 stty –tostop 命令,以确保生成 tty 输出的后台程序不会产生信号。
1.2 程序工作原理
程序的工作流程如下:
1. 获取信号量标识 :使用 semget 函数从你选择的(任意)键获取信号量标识。如果需要, IPC_CREAT 标志会创建信号量。
2. 初始化信号量 :如果程序有参数,它负责使用 set_semvalue 函数初始化信号量,该函数是更通用的 semctl 函数的简化接口。同时,它还会根据参数确定要打印的字符。
3. 引入随机时间
超级会员免费看
订阅专栏 解锁全文
3万+

被折叠的 条评论
为什么被折叠?



