os临界区保护(critical region)以及mutex原理

[TOP]

什么是临界区保护?

临界区(critical region)是指一段特定的代码行为集合,其中可能包括对数据的修改,执行一段特定逻辑等等。

临界区的概念是因为并发编程(multiprogram)的出现导致的,当出现多个task、多个cpu、甚至网络中多个服务器对同一个逻辑对象操作时,就会有条件竞争出现,如果设对该逻辑对象的操作为A,此时必须对A做特殊保护,约定对这A的这种特殊保护统称为临界区保护(mutex exclue),称A操作的范围为临界区。

临界区不保护会出现什么问题?

举例说明,假设有两个task都执行如下代码:

// p is a global var
// ...
	if (p == NULL) {
   
		p = malloc(N);
	}
// .do some thing
	free(p);

这里至少有两个问题:

  • 假设任务1和任务2都同步走到判断p是否为NULL的语句,两个任务均判断p为NULL,接着1先分配内存,紧接着2又重新给p分配内存,导致1任务内存泄漏
  • 1任
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值