zoukankan      html  css  js  c++  java
  • windows多线程同步互斥--总结

    我的windows多线程系列文章:

    windows多线程--原子操作
    windows多线程同步--事件
    windows多线程同步--互斥量
    windows多线程同步--临界区
    windows多线程同步--信号量
    windows 多线程: CreateThread、_beginthread、_beginthreadex、AfxBeginThread 的区别

    MoreWindows的多线程系列文章秒杀多线程面试题系列

    一 同步互斥区别

    同步:同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒,即他们之间有先后关系。

    互斥:对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源                                       本文地址

    线程互斥可以看成是一种特殊的线程同步

    参考同步与互斥的区别和联系博客的解释

    进程(线程)之间的两种关系:同步与互斥。

    所谓互斥,是指散布在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。

    所谓同步,是指散布在不同进程之间的若干程序片断,它们的运行必须严格按照规定的 某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。

    显然,同步是一种更为复杂的互斥,而互斥是一种特殊的同步。也就是说互斥是两个线程之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)!

    总结

    互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

    同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

    参考秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量的解释

    当线程并发执行时,由于资源共享和线程协作,使用线程之间会存在以下两种制约关系。

    (1).间接相互制约。一个系统中的多个线程必然要共享某种系统资源,如共享CPU,共享I/O设备,所谓间接相互制约即源于这种资源共享,打印机就是最好的例子,线程A在使用打印机时,其它线程都要等待。

    (2).直接相互制约。这种制约主要是因为线程之间的合作,如有线程A将计算结果提供给线程B作进一步处理,那么线程B在线程A将数据送达之前都将处于阻塞状态。

    间接相互制约可以称为互斥,直接相互制约可以称为同步,对于互斥可以这样理解,线程A和线程B互斥访问某个资源则它们之间就会产个顺序问题——要么线程A等待线程B操作完毕,要么线程B等待线程操作完毕,这其实就是线程的同步了。因此同步包括互斥,互斥其实是一种特殊的同步

    二 同步互斥的方法

    分为两类:用户模式和内核模式。顾名思义,内核模式就是指利用系统内核对象的单一性来进行同步,使用时需要切换内核态与用户态,而用户模式就是不需要切换到内核态,只在用户态完成操作。

    用户模式下的方法有:原子操作、临界区

    内核模式下的方法有:互斥量、信号量、事件

    三 临界区、互斥量、信号量、事件 对比

    image

    1、关于线程所有权属性:即某个线程获得该同步工具后,在他释放该工具前可以多次进入想访问的资源,一般来说具有所有权属性的工具不用于线程同步,只用于互斥,具体可以参考本文最前面的几篇博客

    2、内核模式下的工具可以用于不同进程的线程之间的同步互斥,用户模式则只能用于相同进程的线程之间

    3、只有互斥量在线程异常退出时,会释放对该工具的所有权,其他线程可以继续获取。其他的工具在线程异常退出时,其占有的工具不会释放,其他线程需要一直等待

    【版权声明】转载请注明出处:http://www.cnblogs.com/TenosDoIt/p/3602797.html

  • 相关阅读:
    CodeForces 1096E: The Top Scorer
    洛谷 P4175: bzoj 1146: [CTSC2008]网络管理
    洛谷 P4592: bzoj 5338: [TJOI2018]异或
    洛谷 P3307: bzoj 3202: [SDOI2013] 项链
    洛谷 P4248: bzoj 3238: [AHOI2013]差异
    洛谷 P5089: CodeForces #500 (Div. 1) B / 1012B : Chemical table
    关于Green-Kubo方法模拟水的粘度
    Lammps 关于初始化速度的分布问题
    LAMMPS-special bonds
    DL_POLY的安装问题
  • 原文地址:https://www.cnblogs.com/TenosDoIt/p/3602797.html
Copyright © 2011-2022 走看看