信号量与自旋锁(1): 并发和竞态

1. 概念:
  • 操作系统中存在大量的并发访问, 因此会导致竞态的可能性. 竞态通常由于对资源的共享所产生.
  • 当两个执行线程对相同的数据结构(或硬件资源)进行访问时, 这种可能性就永远存在.
  • 因此, 首要的原则是:在设计过程中, 应该尽量避免这种情况的发生.
  • 但事实是, 这样的共享的大多数情况下是必须的, 包括硬件资源, 全局变量, 指针多向传递等等.


2. 管理:
资源共享的硬规则是:
  • 在单个执行线程之外共享资源的时候, 另外一个线程可能对该资源的观察不一致, 因此必须显式地管理对该资源的访问.
  • 当资源可用时, 它必须准备好在其资源的请求, 直到资源上不存在任何引用为止. (比如已打开的用户空间文件). 这通常以引用计数的方式处理.

3. 举例:
有进程A, B为一个设备同时分配内存.
当进程A已经为设备分配了内存时, 从进程B的角度所看到的数据与进程A是不一致的, 也就是说, 进程B不知道进程A已经为该共享设备分配了内存, 因此它会执行自己的分配并覆盖进程A的工作. 这显然造成了内存泄露, 并会衍生出更多的问题. 在这种情况下, 我们必须控制进程A, B对共享设备的访问. 这就要求共享设备中的共享数据对所有执行进程(如A, B, C...)的可见性, 并对共享数据实行保护.
这种保护通常有两种机制可以实现, 即:
  • 信号量
  • 自旋锁
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值