高级进程间通信之信号量详解
1. 信号量概述
信号量是一种用于防止两个或多个进程或线程同时访问共享资源的计数器。在UNIX中,“信号量”通常指通过信号量系统调用操作以同步进程的对象,而“互斥锁”一般用于同步线程。
信号量分为二进制信号量和一般信号量:
- 二进制信号量只有锁定和未锁定两种状态。
- 一般信号量有无限(或至少非常多)个状态,获取(锁定)时减1,释放(解锁)时加1,值不能为负。
一般信号量通常通过 semwait 和 sempost 操作进行访问,以下是简单的C语言实现:
void semwait(int *sem)
{
while (*sem <= 0)
; /* do nothing */
(*sem)--;
}
void sempost(int *sem)
{
(*sem)++;
}
然而,这种简单实现存在问题:
- 信号量变量通常不在进程间共享。
- 函数执行不是原子操作,可能导致信号量值变为非法。
- semwait 在信号量为0时会进行忙等待,浪费CPU资源。
因此,信号量需要由内核提供,以实现进程间数据共享、原子操作和CPU调度。
2. 使用文件和消息实现信号量
- 使用文件 :可以使用
open函数创建一个简单的二进
超级会员免费看
订阅专栏 解锁全文
2590

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



