【转载】linux的进程、线程的同步与通信机制
时间:2009-07-27 来源:moto_linux
内核同步
根据Harvey M.Deitel等著的操作系统(第三版)的说法,linux内核提供了两种机制进行互斥访问:锁与信号量。
锁
1. 自旋锁
自旋锁禁止抢占,但本身可能导致无限延期、甚至死锁,通常通过抢占锁计数器进行控制。
2. 阅读程序/写程序锁
阅读锁可以被多重持有,写入锁只能被一个程序持有。
3. 顺序锁
有写入程序在等待时,拒绝新的读取程序进入。
内核信号量
计数的信号量, 由等待队列与计数器表示。
进程间通信
1. 信号
不支持进程间交换多于一个字的数据;
进程或者线程以三种方式中的一种处理信号,这三种方式分别是:
-
忽略信号;
-
捕捉信号;
-
执行内核为信号定义的默认动作,包括放弃、执行内存转储、简单忽略信号、停止和继续。
2. 管道
利用生产者消费者模型进行通信。
3. 套接字
主要类型包括:
流套接字,以字节流传输信息;
数据文报套接字,在数据文报的独立单元中传输信息。
4. 消息队列
5. 共享内存
6. System V信号量