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

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

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

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

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

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

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

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

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

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

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

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

Concurrency and Race Conditions的更多相关文章

  1. Linux kernel Programming - Concurrency and Race Conditions

    Concurrency and Its Management Race condition can often lead to system crashes, memory leak,corrupte ...

  2. .NET:race conditions

    race conditions (when an anomalous result occurs due to an unexpected critical dependence on the tim ...

  3. Operating System-进程/线程内部通信-竞争条件(Race Conditions)

    从本文开始介绍进程间的通信,进程间通信遇到的问题以及方式其实和线程之间通信是一致的,所以进程间通信的所有理论知识都可以用在线程上,接下来的系列文章都会以进程之间的通信为模版进行介绍,本文主要内容: 进 ...

  4. linux 并发 RCU

    What is RCU, Fundamentally? https://lwn.net/Articles/262464/ If you can fill the unforgiving secondw ...

  5. Concurrency vs. Parallelism

    http://getakka.net/docs/concepts/terminology Terminology and Concepts In this chapter we attempt to ...

  6. 33 Introducing the Go Race Detector

    Introducing the Go Race Detector 26 June 2013 Introduction Race conditions are among the most insidi ...

  7. Java Concurrency In Practice

    线程安全 定义 A class is thread-safe if it behaves correctly when accessed from multiple threads, regardle ...

  8. Java 8 Concurrency Tutorial--转

    Threads and Executors Welcome to the first part of my Java 8 Concurrency tutorial. This guide teache ...

  9. 【转】 Anatomy of Channels in Go - Concurrency in Go

    原文:https://medium.com/rungo/anatomy-of-channels-in-go-concurrency-in-go-1ec336086adb --------------- ...

随机推荐

  1. html 子元素和父元素都监听了 click 事件,点击子元素时为何先触发的是父元素的 click 事件?

    先上一段代码,点击子元素时先触发的是父元素的 click 事件 <html> <head> <script type="text/javascript" ...

  2. ncnn编译安装-20190415

    ncnn编译安装 1.git clone https://github.com/Tencent/ncnn 2.按照wiki说明来编译,根据需要,选择不同的编译方式.在ncnn/CMakeLists.t ...

  3. java IO字符流

    字节流:因为内存中数据都是字节,二进制数据. 字符流:方便处理文本数据.字符流是基于字节流的. ascii 编码表,并且各国都有自己的编码表. unicode码表,世界码表.优化后 utf-8码表. ...

  4. bzoj 4842: [Neerc2016]Delight for a Cat

    Description ls是一个特别堕落的小朋友,对于n个连续的小时,他将要么睡觉要么打隔膜,一个小时内他不能既睡觉也打隔膜 ,因此一个小时内他只能选择睡觉或者打隔膜,当然他也必须选择睡觉或打隔膜, ...

  5. Linux-mail设置

    邮箱文件设置 #配置发邮件 /etc/mail.rc中追加 set bsdcompat set from=c4kaichen@163.com .com set smtp-auth-user=c4kai ...

  6. 17monipdb.dat

    17monipdb是一款全球ipv4地址归属地数据库.专注于与地理位置定位相关的数据的整理与发行,致力于将地理位置数据变得更准确.更精确,该 IP 库主要基于 BGP/ASN 数据以及遍布全球的网络监 ...

  7. RmNet,CDC-ECM ,NDIS,RNDIS区别

    RmNet和CDC-ECM区别:更像是两种拨号方式的区别,RmNet获取公网IP,ECD-ECM获取局域网IP. 在高通平台上,rmnet driver 和标准的CDC-ECM是有区别的,rmnet ...

  8. 开发组件:Systemd

    Systemd 入门教程:命令篇 http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

  9. js基础和运算符

    1.什么JavaScript?    运行环境 :    浏览器                    是一种具有安全性的客户端的脚本语言     用来实现与web页面交互 脚本语言:语言嵌入到htm ...

  10. concurrent.futures模块

    1.concurrent.futures模块介绍 2.ThreadPoolExecutor线程池使用 3.ProcessPoolExecutor进程池使用 4.其他方法使用 1.concurrent. ...