采用指令test_and_set()的互斥实现原理解析

wzzyhg 19 0
采用指令test_and_set()的互斥实现原理解析

场景举例:

假设当前为false,则说明当前临界区资源没有上锁。此时某进程P1想要进入临界区,由于进入区的while循环条件test_and_set(&lock)为假,当前进程可以进入临界区执行相应的操作(注意此时lock变量的值已经被test_and_set()指令修改为true),在执行完临界区操作完毕后会执行到退出区的lock = false;语句,该语句代表着对临界区资源锁的释放。

接下来解释如何如何实现的互斥。

我们假设当前状态时进程P1还在执行临界区操作,而此时有另外一个进程P2也想要进入临界区,那么它也会执行相同的代码块------执行到进入区代码while(test_and_set(&lock));。由于进程P1还没有执行完临界区操作,那么它不会对临界区资源的锁进行释放,即当前变量lock的值为true,所以P2进程会在进入区的while()循环代码无限循环,从而实现了进程P1和进程P2互斥的访问临界区资源。

发表评论 取消回复
表情 图片 链接 代码

分享