Linux 进程间通信:信号量、共享内存与消息队列详解
在 Linux 系统中,进程间通信(IPC)是一项至关重要的功能,它允许不同的进程之间进行数据交换和同步。本文将深入探讨三种常见的 IPC 机制:信号量、共享内存和消息队列,并通过具体的代码示例展示它们的使用方法。
信号量示例
首先,我们来看一个信号量的示例程序。以下是程序的运行示例:
$ cc sem1.c -o sem1
$ ./sem1 1 &
[1] 1082
$ ./sem1
OOXXOOXXOOXXOOXXOOXXOOOOXXOOXXOOXXOOXXXX
1083 - finished
1082 - finished
$
在这个示例中,“O” 代表程序的第一次调用,“X” 代表第二次调用。每个程序在进入和离开临界区时都会打印一个字符,因此每个字符都应该成对出现。从输出结果可以看出,“O” 和 “X” 确实正确配对,这表明临界区正在被正确处理。
如果在你的系统上运行该程序时出现问题,你可能需要在调用程序之前使用 stty –tostop 命令,以确保生成 tty 输出的后台程序不会产生信号。
信号量工作原理
程序首先使用 semget 函数从你选择的(任意)键中获取信号量标识。如果需要, IPC_CREAT 标志会创建一个信号量。
如果程序带有参数,它将负责初始化信号量,这是通过 set_semvalue 函数完
超级会员免费看
订阅专栏 解锁全文
2942

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



