信号量
进程同步:让进程走走停停实现合理有序,通过信号量实现合理有序。
以生产者,消费者实例,多个线程负责生产,多个线程负责消费,生产者消费者共用一个缓冲区,线程之间需要同步。
用信号进行同步。缓冲区满了,该线程睡眠,缓冲区有空余,将唤醒一个线程。
用信号进行同步,不能解决全部问题。引出信号量,信号量会多保存一些信息。
等于1的信号量就是锁。
临界区:只允许一段代码进行修改 ,满足互斥性。
多个进程如果通过信号量实现进程同步,那么就会共享数据,共享信号量,多个进程亦或线程在对共享数据进行修改的时候会出现问题。(原子操作)
读写信号量的代码一定是临界区。(对信号量进行保护)
临界区的实现:
实质上是实现修改共享数据的同步。
一,用软件实现临界区。
1.轮换法
2.标记法
3.轮换+标记法
以面包店算法为例
二,cli() sti()。
进程只有被调度之后才可能进入另一个执行序列,临界区直接关中断,阻止调度。
(多核CPU不好使)
三,硬件原子指令法
核心:硬件
将修改锁的指令做成原子指令。
锁的概念类似信号量,硬件保证修改锁的时候的原子性,将修改锁操作做成一条指令。
标签:进程同步,信号量,修改,临界,线程,缓冲区 From: https://www.cnblogs.com/wuyun--wy/p/17022139.html