线程文章:http://www.cnblogs.com/edisonchou/p/4848131.html

重点在于多个线程同时访问,保持线程的同步。

线程同步的问题:

1,线程同步比较繁琐,而且容易写错。

2,线程同步会损害性能,获取和释放一个锁是需要时间。

3,线程同步一次只允许一个线程访问资源。

类库和线程安全

一个线程安全的发那个发意味着两个线程试图同时访问数据时,数据不会被破坏。

基元用户模式和内核模式构造

基元:指代码中最简单的构造,有两种基元构造:用户模式和内核模式。

1,基元用户模式比基元内核模式速度要快,因为直接使用特殊的cpu指令来协调线程,在硬件中发生的。

2,基元用户模式构造缺点,只有windows操作系统内核才能停止一个线程的运行。用户模式中运行线程可能被抢占,但是会最快的速度进行调度,导致取得一个资源但又暂时去不到一个线程会让程序一直在用户模式中运行,浪费时间。

3,基元内核模式构造:windows操作系统自身提供,应用程序线程调用在系统内核中实现的函数。会将线程从用户模式切换到内核模式(或相反)导致巨大性能损失。优点:调用线程会阻塞线程,但不会浪费CPU时间。

3,混合构造:将基元用户模式和基元内核模式优势结合起来

用户模式构造:

分为两种基元用户模式线程同步构造:易失构造  和  互锁构造

易失构造:包含在一个简单数据类型的上执行原子性或读或写操作

互锁构造:包含在一个简单数据类型的变量执行原子性的读和写操作

Clr Via C#读书笔记----基元线程同步构造的更多相关文章

  1. CLR via C# I/O基元线程同步构造

    1. 分为用户模式构造和内核模式构造 2. 用户模式构造 a.易失构造 在一个简单数据类型的变量上执行原子性读或写操作 VolaileWrite 强制address中的值在调用时写入,除此之外,按照源 ...

  2. 基元线程同步构造之waithandle中 waitone使用

    在使用基元线程同步构造中waithandle中waitone方法的讲解: 调用waithandle的waitone方法阻止当前线程(提前是其状态为Nonsignaled,即红灯),直到当前的 Wait ...

  3. [.net]基元线程同步构造

    /* 基元线程同步构造 用户模式构造: 易变构造(Volatile Construct) 互锁构造(Interlocked Construct):自旋锁(Spinlock) 乐观锁(Optimisti ...

  4. 【C#进阶系列】28 基元线程同步构造

    多个线程同时访问共享数据时,线程同步能防止数据损坏.之所以要强调同时,是因为线程同步问题实际上就是计时问题. 不需要线程同步是最理想的情况,因为线程同步一般很繁琐,涉及到线程同步锁的获取和释放,容易遗 ...

  5. 基元线程同步构造之 Mutes(互斥体)

    互斥体实现了“互相排斥”(mutual exclusion)同步的简单形式(所以名为互斥体(mutex)). 互斥体禁止多个线程同时进入受保护的代码“临界区”(critical section). 因 ...

  6. 基元线程同步构造之信号量(Semaphore)

    信号量(semaphore)不过是由内核维护的 int32变量而已,(说通俗点就是好比一个线程容器里面允许执行的线程数,0计数就是允许执行的0个线程数,1就是允许执行的1个线程数,2就是允许执行的2个 ...

  7. 基元线程同步构造 AutoResetEvent和ManualResetEvent 线程同步

    在.Net多线程编程中,AutoResetEvent和ManualResetEvent这两个类经常用到, 他们的用法很类似,但也有区别.ManualResetEvent和AutoResetEvent都 ...

  8. 《CLR via C#》读书笔记--基元类型、引用类型和值类型

    编程语言的基元类型 编译器直接支持的数据类型称为基元类型.基元类型直接映射到Framework类库中存在的类型.例如:C#中的int直接映射到System.Int32类型.下表给出了C#基元类型与对应 ...

  9. 2019.03.21 读书笔记 基元类型的Parse与TryParse 性能与建议

    Parse转换失败时会抛出异常,耗损性能,如果转换成功,则与TryParse无差异.查看源码,tryparse的代码更多一些,在失败时,反而性能更优,主要是抛出异常耗损了性能.所以在不确定是用Tryp ...

随机推荐

  1. Android应用签名

    http://www.cnblogs.com/ghj1976/archive/2011/07/18/2109381.html 为了要签名? 开发Android的人这么多,完全有可能大家都把类名,包名起 ...

  2. web安全及防护

    本文将对web方面的安全问题以及相应的防护方法进行一个简单的介绍. SQL注入(SQL Injection) 原理:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺 ...

  3. linux 编程环境搭建过程记录

    1, 安装centos 7 最小版  过程略 ...... 2, 安装桌面安装yum groupinstall "GNOME Desktop" 更新系统运行级别ln -sf /li ...

  4. maven简单配置

    maven-3.3.9下载 Maven是一个项目管理和综合工具.Maven提供了开发人员构建一个完整的生命周期框架.开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周 ...

  5. zaqar项目介绍

    Zaqar is a multi-tenant cloud messaging and notification service for web and mobile developers. It c ...

  6. c3p0 config

    c3p0-config.xml<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> ...

  7. Appium 客户端库 API

    ## Appium 客户端库 Appium 有对应以下语言的客户端库: 语言 | 代码 :--|--:[Ruby][rubygems] | [GitHub](https://github.com/ap ...

  8. Effective C++ -----条款43:学习处理模板化基类内的名称

    可在derived class templates内通过“this->“指涉base class templates内的成员名称,或藉由一个明白写出的”base class资格修饰符”完成.

  9. BestCoder24 1001.Sum Sum Sum(hdu 5150) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5150 题目意思:就是直接求素数. 不过 n = 1,也属于答案范围!!只能说,一失足成千古恨啊---- ...

  10. ClassLoad的加载过程及分析

    -Xbootclasspath:bootclasspath 让jvm从指定路径(可以是分号分隔的目录.jar.或者zip)中加载bootclass,用来替换jdk的rt.jar:若非必要,一般不会用到 ...