• Concurrency and Race Conditions


    1.当多个线程访问共享硬件或软件资源的任何时候,由于线程之间可能产生对资源的不一致观察,所以必须显式管理对资源的访问。

    2.内核中的并发管理设施:

    (1). 信号量: P操作将信号量的值减 1 ,判断值是否大于 0 ,如果大于 0 的话,进程继续执行。否则进入阻塞队列等待被唤醒。

           V操作将信号量的值加 1, 判断值是否小于 0 ,如果小于 0 的话,首先唤醒被阻塞的进程,然后退出,否则直接退出。

    (2). 互斥体: 用于互斥的信号量。

    (3). 读写信号量: 允许多个并发的读,并对写进行互斥,且写的优先级比读的优先级高。

    (4). 完成量: 在当前线程之外初始化一个活动, 然后在当前进程中等待完成,而活动完成后操作完成量,通知活动的完成。

    (5). 自旋锁:进程尝试获得自旋锁,如果获得成功,则进程继续执行,如果自旋锁被别的进程占用,则该进程进入忙循环并重复检查    这个锁,直到该锁可用为止。

    注意: 拥有自旋锁的代码都必须是原子的,它不能因为任何原因放弃处理器,特指当别的任何上下文有对自旋锁的操作时。

    (6). 原子变量:原子变量的操作由单个机器指令来操作。

    (7). 顺序锁:保护的资源很少,很简单,会频繁访问而且写入访问很少发生且必须快速。读取者需要检测是否和写入者发生冲突,当发生冲突时就需要重试对资源的访问。

    (8). RCU 读取-复制-更新: 在需要修改数据时,写入线程首先复制,然后修改副本,之后用新的版本替代相关指针。替换的时机是老的版本上没有其他引用时。

  • 相关阅读:
    ES6rest运算符
    厉害啦,可视化低代码编程平台开源了
    流媒体服务器
    umi的HTML 模板
    reactrouter 中的history
    umi如何在主文件(类似index.html)document.ejs中引入js文件
    开源项目思路
    舌苔黄腻
    [转]IBM GDC,你不会有创新!
    halconrectangle1_domain获取指定矩形区域的图像
  • 原文地址:https://www.cnblogs.com/youngvoice/p/4839332.html
Copyright © 2020-2023  润新知