进程同步

并发性是进程的一个重要特征,既然是并发,那么,如何才能保证多个进程之间能够实现按照预定步骤完成操作呢?这就涉及到同步的问题,先不要纠结同步这个词是什么意思,可以暂时理解为保证并发进程的正确执行。


如果两个进程之间除了CPU时间片之外,没有任何交集,那么,可以理解为不存在同步的问题,因为它们之间无论怎么运行都不会影响对方的结果。但是,假设这两个进程都需要访问同一个资源,现在假定为一台打印机,两个进程同时使用该打印机,谁也不知道这两个进程的资源抢夺时间点,可能导致打印的结果出现混乱的情况。


同步的实质是对临界区访问的实现:

 

临界区入口
    临界区;
临界区出口

1 软件实现手段

 

int turn=0;
...
while(turn!=0) do{};
turn=1;
临界区...
turn=0;
...

    上述算法设置一个变量turn表示是否有进程正在占用临界区,如果turn=1,则临界区内有进程,只有当该进程释放临界区(即turn=0)时,其他进程才能进入临界区。

    该算法存在一个问题:

    当临界区内无进程,而且正好有2个以上的进程通过了turn==0的检测,则还是有多个进程进入了临界区,失去了临界区的意义。

2 Peterson算法

enter_region(i);
    临界区;
leave_region(i);

    当一个进程想进入临界区时,先调用enter_region函数,判断能否安全进入,不能则等待,当它从临界区退出后,调用leave_region函数,允许其他进程进入临界区。

    存在的问题:

(1)忙等待

(2)编程复杂

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值