多线程程序的临界区

Posted lihuali

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程程序的临界区相关的知识,希望对你有一定的参考价值。

所谓的临界区:是指进程中的一段需要访问共享资源并且当另一个进程处于相应代码区域时便不会被执行的代码区域
对于临界区的管理的必须要满足一下的四个要求:
互斥:同一时间临界区中最多存在一个线程
Progress:如是一个线程想要进入临界区,那么它最终会成功
有限等待:如果一个线程i处于入口区,那么在i的请求被接受之前,其他线程进入临界区的时间是有限制的。
无忙等待(可选):如果一个进程在等待进入临界区,那么在它可以进入之前会被挂起。

解决方案
①:禁用硬件中断
缺点:一旦中断被禁用,线程就无法被停止,整个系统都会为你停下来。可能导致其他线程处于饥饿状态。
②:基于软件的解决方法
③:更高级的抽象

案例分析:假设有甲乙两个人共用一个冰箱里的面包,如果那个人发现冰箱里没有面包后就去购买面包。如果保证冰箱里的面包不会多也不会少。

技术图片代码

技术图片

以上是关于多线程程序的临界区的主要内容,如果未能解决你的问题,请参考以下文章

多线程间的互斥(下)

多线程多线程同步_Critical Section临界区

Java多线程-静态条件与临界区

c++多线程问题

多线程相关------临界区CriticalSection

Java多线程synchronized