1.原子操作。
2.critical section(临界区),互斥,死锁和饥饿。忙等待。lock.Acquire()和lock.Release()。
3.临界区特点。互斥,前进,等待时间有限。
4.基于硬件中断。进入临界区:禁用中断,离开临界区:开启中断。
5.给予软件的解决方法:使用两个共享数据项。
6.TestAndSet和Exchange操作是不可以被中断的。 结合lock.Acquire()和lock.Release()可以实现多个进程对临界区的访问。可以从忙等待到无忙等待。
7.给予原子操作的指令实现临界区访问是最简单和应用广泛的。
8.信号量,P和V操作。信号量可以用在互斥和条件同步两方面。二进制信号量可以实现互斥。二进制信号量实现调度约束(一个线程等待另一个线程处理事情)。有界缓冲区的生产者-消费者问题。V的顺序可以颠倒,P不可以。
9.信号量的实现。
10.管程。目的:分离互斥和条件同步的关注。一个锁,0个和多个条件变量。同样生产者-消费者问题用管程解决。Hansen-style和Hoare-style的唤醒机制。
11.读者-写者问题。读者优先,写者优先。
12.哲学家问题。
13.死锁问题。资源分配图(P,R)。若果图中无循环,没有死锁;有循环,若每个资源只有一个实例,死锁,每个资源有几个实例,不死锁。
14.死锁的特征:互斥,持有并等待,无抢占,循环等待。这时死锁的必要条件,不是充分。
15.死锁的处理办法:鸵鸟算法,假装不会发生。
16.打破死锁的四个必要条件;死锁避免;安全序列;银行家算法(死锁避免)