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. 设计模式初学者笔记:Abstract Factory模式

    首先啰嗦下创建迷宫所用的Room类.这个类并不直接保存Room四周的构造,而是通过MapSite* _sides[4]这个私有数组成员指向Room四周的构造.那么什么时候将四周构造直接放在Room中, ...

  2. idea远程调试jar包

    1 服务器启动jar包 (监听端口5005) java -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=y -j ...

  3. [转]C#鼠标拖动任意控件

    C#鼠标拖动任意控件(winform) 分类: c#2011-08-15 22:51 178人阅读 评论(0) 收藏 举报 winformc#userwindowsobjectapi using Sy ...

  4. eclipse在线安装jd反编译插件

    eclipse在线安装jd反编译插件地址 http://jd.benow.ca/jd-eclipse/update

  5. 【转】SQL模糊查询

    在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任 ...

  6. storm的优化以及雪崩问题

    下图来说明什么是雪崩现象: 当spout发送的速度非常快,而bolt的处理速度很慢,spout源源不断地向内存中发送tuple,这样下去迟早会把内存撑爆,这样就叫做雪崩现象! 怎么处理雪崩问题呢 第一 ...

  7. 普适注意力:用于机器翻译的2D卷积神经网络,显著优于编码器-解码器架构

    现有的当前最佳机器翻译系统都是基于编码器-解码器架构的,二者都有注意力机制,但现有的注意力机制建模能力有限.本文提出了一种替代方法,这种方法依赖于跨越两个序列的单个 2D 卷积神经网络.该网络的每一层 ...

  8. sql server查看表占用索引空间(小技巧)

    选择表右键—属性—存储—索引空间

  9. 编写一个函数,在页面上输出一个N行M列的表格,表格内容填充0~100的随机数字

    function print(n,m){     document.write("<table>");     for(var i=0; i<n; i++){   ...

  10. python输入输出及变量

    知识内容: 1.python输出及注释 2.变量及常量 3.python用户输入 4.Hello,World程序 一.python输出及注释 1.python输出 在python2和python3中的 ...