![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统互斥锁
白帽小丑
只是一个网络安全爱好者
展开
-
互斥锁实验
如果一个进程打开了一个锁,但是不去释放这个锁,那么会发生什么呢。这个代码上节我们知道如果进行进程并发执行,那么很可能值不唯一。一直再loop根本运行不下去,这就是死锁。可以看到因为并发的问题执行结果不唯一。我们把释放锁的代码给注释掉。可以看到没有互斥的问题了。原创 2023-02-21 13:35:22 · 249 阅读 · 0 评论 -
互斥锁原理
这里我自己对这个代码分析了一下:tom要执行需要满足alice没留下note,一但留下note,tom就无法喂食,而alice是一定会喂食的,所以这里需要alice这个设备性能比tom好。临界区必须有一个进程,因为如果临界区为空且满足互斥性那么其他进程都无法在临界区运行,临界区运行的程序也不能一直占用临界区,必须要让其他进程等待时间为有限的。解决浪费cpu周期的缺点,我们可以将这个等待进程进入等待队列里,但是我们要注意,万一自旋的时间比切换队列消耗的时间更久,那么这个操作反而浪费了资源。原创 2023-02-21 13:31:13 · 304 阅读 · 0 评论 -
进程间同步
我们可以看到造成这样的原因是因为T是局部变量,每个进程的stack都是独立的,所以才会得到两个程序将全局变量x都赋值了1,即便是线程并发,栈空间也是独立的,所以也可能会出现这样的问题。交互关系之间的关系是很复杂的,假如一个进程需要等待另外一个进程的调用才可以运行,就如下面这个例子。但是不论如何,只要是两个进程或线程并发执行,如果里面有需要交换数据,那么就会有这样问题。那么异步进程我们前面说了,特点就是随机,那么随机的进程就会产生。如果并发线程或进程T1先执行,T2在执行,那么就不会出现问题。原创 2023-02-21 13:23:19 · 319 阅读 · 1 评论