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. Windows 客户端时间更新脚本NTP

    Windows XP 客户端时间更新脚本NTP ::Windows XP 客户端时间更新脚本NTP reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsof ...

  2. ASP.NET ASHX中获得Session

    有时候需要在ASHX中获取Session,可是一般是获取不到的,如何解决? 1-在 aspx和aspx.cs中,都是以Session["xxx"]="aaa"和 ...

  3. iotBaidu问题小结

    1.后台程序不能正常运行: d:\>java -jar MqttService.jar Exception in thread "main" java.lang.Securi ...

  4. Logstash之一:入门介绍

    简介 Logstash是一个接收,处理,转发日志的工具.支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型.怎么样听起来挺厉害的吧?在一个典型的使用场景下(EL ...

  5. 合并单元格/VBA

    ' 合并某一列中相同数据的单元格 Sub MergeColumns() Dim rowN As Integer Dim i, j, m, n As Integer Dim col As Integer ...

  6. MariaDB管理系统

    MariaDB管理系统 [root@c4kaichen@163 ~]# yum install mariadb[root@c4kaichen@163 ~]# yum install -y mariad ...

  7. ubuntu 查看系统是32位还是64位

    查看cpu信息 cat /proc/cpiinfo 查看ubuntu版本: cat /etc/issue 查看系统是32位还是64位 方法1: #查看long的位数,返回32或64 getconf L ...

  8. Linux火焰图-ubuntu

    关注火焰图非常长的时间了!~~一直未能自己做个火焰图出来.今天小试一把. ubuntu18.04 ssh登陆之后执行命令 安装软件 apt-get install -y linux-cloud-too ...

  9. 根据inode编号来删除文件或目录

    在Linux系统上,有时候会出现文件名为特殊字符的文件或目录,当我们使用rm来删除这样的文件或目录时,就会出错导致删不掉.但是我们可以依据inode号来删除这样的文件,方法如下: (1)执行ls -i ...

  10. PHP笔记(配置UPUPW环境)

    一,首先修改HOSTS将127.0.0.1 gzt.com加入,前面不要# 二,GZT.COM的数据库文件在--------------配置在: - 三,配置 主要修改这几个  $BASIC=arra ...