(在知乎看到轮子哥说,掌握了MSDN上的并发部分 和 线程与进程部分就可以掌握所有语言的多线程编程,我在网上翻了一下并没有中文版,所以决定自己翻译一下...)

目录:

线程之间协同运行的方式有许多种,下面所述的函数提供了线程之间并发获取资源的方式。

  • 同步部分的新特性
  • 关于同步
  • 使用线程同步
  • 参考

同步部分的新特性:

Windows提供了下面的新特性:

Win8

EN
此内容没有您的语言版本,但有英语版本。

同步的新特性

 
DeleteSynchronizationBarrier

删除屏障同步

EnterSynchronizationBarrier
   进入屏障同步,让调用的线程等待当前屏障同步直到其中线程数目达到最大值。
GetOverlappedResultEx
   在规定时间内获取某一个文件或者明明管道,通信管道中重叠操作的结果。
InitializeSynchronizationBarrier
   规定一个屏障同步中最大线程数目

Specifies the maximum number of threads and spin count for a new synchronization barrier.

WaitOnAddress

等待地址中数据发生改变

WakeByAddressAll

唤醒所有等待该地址上数据发生改变的线程

WakeByAddressSingle

唤醒一个等待该地址上数据发生改变的线程

关于同步

为了同步获取资源,在等待函数中使用一个同步对象,同步对象的状态分为就绪状态和等待状态,等待函数允许一个线程阻塞自身直到某个特定的等待状态对象进入就绪态。

同步对象:
同步对象是一个句柄能够传入等待函数来协调多线程执行的对象,多个进程可以拥有同一个同步对象的句柄,为进程之间的通信提供了可能。

下列对象类型是专门为同步提供的:
事件类型:在事件发生的时候通知一个或者多个等待线程。
互斥量:能够在某一时刻被一个线程持有,使得线程之间能够协调获取共享资源。
信号量:维护一个不小于零的数值,来限制能够获取当前共享资源的线程数量。
等待计时器:通知一个或者多个线程等待时刻已到。

下列对象类型可以提供同步服务:
改变通告:当特定的改变在某个文件夹发生,状态被设置为就绪
终端输入:当终端输入缓冲区存在尚未读取的数据,被设置为就绪,当缓冲区为空,被设置为等待。
任务(Job):当任务重所有进程都超时结束的时候状态被设置为就绪态
内存资源通告:特定内存发生特定改变,状态被设置为就绪态。
进程:进程运行期间为等待,进程结束后设置为就绪态。
线程:运行期间为等待,结束后为就绪态。

特定情况下也可以使用文件,具名管道来当制作等待对象,但是这种用法不太好,我们可以选择使用异步IO来等待OVERLAPPED结构中的事件被设置为就绪,这样比直接使用事件

对象更加安全因为这样避免了多个重叠操作发生混淆(在同一个具名管道或者文件上的多个重叠操作),在这种情况下我们没有办法直到到底是什么行为将等待对象置为就绪态的。

等待函数:
等待函数使得一个线程阻塞其自身的运行直到达到特定的条件,等待函数的类型决定了标准的类型,当一个等待函数被调用,它检查是否达到了等待条件,如果没有达到就继续的等待直到超时或者被触发。

单个对象等待函数
要求一个指向等待对象的句柄,当满足下列条件之一的时候函数返回:
1.特定对象进入就绪状态
2.达到等待时间

多个对象等待函数
传入一个数组,当期这种一个进入就绪状态或者达到等待时间,函数返回
返回第一个就绪对的对象句柄

可选等待函数
特定条件满足的时候返回

注册等待函数
等待函数室友线程池的一个线程运行的,当特定条件达到的时候,毁掉函数会被线程池中的线程运行。
默认情况下,注册等待是一个多重等待操作,系统每次都会在时间进入就绪态之后重置它,如果我们要声明这个对象只要被调用一次,传入 WT_EXECUTEONLYONCE.

地址等待
线程可以使用地址等待函数来等待目标地址的值改变。函数当改变地址值得线程调用一个WakeByAddressSingle 的时候返回。

与等待对形象的关系
等待函数能够修改几种同步对象的状态。当着街对象进入就绪态导致函数返回的时候修改会发生,等待函数只能按照以下的几种写实来修改等待对象:
信号量的值减一
将胡质量,自动重置函数和状态改变对象的状态设置为等待状态
计时器设置为等待状态
手动重置时间,手动重置计时器,进程线程和终端输入对象不会被等待函数修改

创建窗口

在使用等待函数创建窗口的时候一定要小心,如果一个线程创建了窗口,那么该线程必须处理信息,信息广播到所有的系统窗口中,如果你有一个没有设置等待间隔的等待函数系统将会死锁!

下列是一些同步方法:

MSDN 同步部分 个人笔记的更多相关文章

  1. rsync同步工具学习笔记

    rsync同步工具 1.rsync介绍 rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.rsync软件适用于unix/linux/windows等多种操作 ...

  2. synchronized(){}同步代码块笔记(新手笔记,欢迎纠正)

    /* 内容:同步代码块,目的是解决多线程中的安全问题.什么安全问题呢??就是在执行run方法时,假如线程-0刚刚获得执行权, *还没执行时,就挂那了,这时线程-1获得执行权,并进行执行,就有可能出现负 ...

  3. Java 线程第三版 第五章 极简同步技巧 读书笔记

    一.能避免同步吗? 取得锁会由于下面原因导致成本非常高:     取得由竞争的锁须要在虚拟机的层面上执行很多其它的程序代码.     要取得有竞争锁的线程总是必须等到锁被释放后. 1. 寄存器的效应 ...

  4. 《Java并发编程实战》第五章 同步容器类 读书笔记

    一.同步容器类 1. 同步容器类的问题 线程容器类都是线程安全的.可是当在其上进行符合操作则须要而外加锁保护其安全性. 常见符合操作包括: . 迭代 . 跳转(依据指定顺序找到当前元素的下一个元素) ...

  5. 《Java并发编程实战》第十五章 原子变量与非堵塞同步机制 读书笔记

    一.锁的劣势 锁定后假设未释放.再次请求锁时会造成堵塞.多线程调度通常遇到堵塞会进行上下文切换,造成很多其它的开销. 在挂起与恢复线程等过程中存在着非常大的开销,而且通常存在着较长时间的中断. 锁可能 ...

  6. 《Java并发编程实战》第十四章 构建自己定义的同步工具 读书笔记

    一.状态依赖性的管理 有界缓存实现的基类 @ ThreadSafe public abstract class BaseBoundedBuffer<E> { @GuardeBy( &quo ...

  7. pull同步远程仓 笔记

    一.远程仓库删除文件 远程仓 1.py 本地仓 1.py  2.py pull后 本地仓 1.py 这里的2.py 是没有改动过的情况,如改动了要解决冲突的,见:https://www.cnblogs ...

  8. 同步FIFO学习笔记

  9. 分享一下我研究SQLSERVER以来收集的笔记

    分享一下我研究SQLSERVER以来收集的笔记 前言 为什麽分享??因为像现在网上很多人攻城师那样,转行去卖水果,卖早餐,总有一日我也会离开这个行业的 由于本人不是在大公司上班工资很低,我希望有一天存 ...

随机推荐

  1. [转]Using the Interop Activity in a .NET Framework 4 Workflow

    本文转自:http://msdn.microsoft.com/en-us/library/ee264174(v=vs.100).aspx This topic applies to Windows W ...

  2. c#拖拽文件

    在“属性”窗口中,先设置MDI的父窗口的AllowDrop 属性更改为true;2.在父窗口的事件中添加下面两个事件 private void Form1_DragEnter(object sende ...

  3. (Android MVVM)使用Data Binding Library(2)

    复习 上一篇学到了如何在layout.xml文件中增加元素,实现数据绑定,本篇接着学习. 事件处理 在layout.xml上绑定事件有两种方法,各有千秋. 1.方法引用 2.监听绑定 1.使用方法引用 ...

  4. Android(java)学习笔记190:ContentProvider使用之学习ContentProvider(内容提供者)的目的

    1. 使用ContentProvider,把应用程序私有的数据暴露给别的应用程序,让别的应用程序完成对自己私有的数据库数据的增删改查的操作. 2. ContentProvider的应用场景: 获取手机 ...

  5. Linux 控制终端转义和控制序列

    DESCRIPTION 描述 Linux控制台实现了VT102和ECMA-48/ISO 6429/ANSI X3.64终端控制的子集, 这个子集很庞大,当然还有Linux自己私有的控制序列,以改变颜色 ...

  6. ALTER FUNCTION - 修改一个函数的定义

    SYNOPSIS ALTER FUNCTION name ( [ type [, ...] ] ) RENAME TO newname DESCRIPTION 描述 ALTER FUNCTION 修改 ...

  7. ztree 样式修改 white-space: nowrap; 后 下划线要是跟上的话 宽度 width 要 auto 就自动更新了

    width:auto; border-bottom:1px solid #ccc; height:30px; display: inline-block;white-space: nowrap;

  8. 下载GitHub指定目录的文件

    使用网站 https://minhaskamal.github.io/DownGit/#/home

  9. 09Windows编程

    Windows编程 2.1      窗口 Windows应用程序一般都有一个窗口,窗口是运行程序与外界交换信息的界面.一个典型的窗口包括标题栏.最小化按钮.最大/还原按钮.关闭按钮.系统菜单图标.菜 ...

  10. PHP 下基于 php-amqp 扩展的 RabbitMQ 简单用例 (三) -- Header Exchange

    此模式下,消息的routing key 和队列的 routing key 会被完全忽略,而是在交换机推送消息和队列绑定交换机时, 分别为消息和队列设置 headers 属性, 通过匹配消息和队列的 h ...