(在知乎看到轮子哥说,掌握了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. ubuntu服务器建立apache虚拟主机

    启用与停用站点的方法 a2ensite 站点名 a2dissite 站点名 基于名字的(通过域名来区分)的虚拟主机 安装好apache以后默认有一个叫default的虚拟主机.新建虚拟主机时可以直接复 ...

  2. 看到了一篇不错的tensorflow文章

    http://dataunion.org/28906.html 本文作者 Steven Dufresne,总结了新手学 TensorFlow 需要的核心知识点和实操内容,旨在鼓励更多人借 Tensor ...

  3. Android(java)学习笔记203:JNI之NDK开发步骤

    1. NDK开发步骤(回忆一下HelloWorld案例): (1)创建工程 (2)定义native方法 (3)创建jni文件夹 (4)创建c源文件放到jni文件夹 (5)拷贝jni.h头文件到jni目 ...

  4. bzoj3994: [SDOI2015]约数个数和(反演+结论?!)

    这题做的历程堪称惊心动魄 刚刚学了莫比乌斯反演的我高高兴兴的和cbx一起反演式子 期间有突破,有停滞,有否定 然后苟蒻的我背着cbx偷偷打开了题解 看到了 我...... 去你的有个性质啊(当然还是自 ...

  5. EditControl 限制输入文本的三种方法

    下边是三种限制编辑框输入内容的方法.在VS里建立基于对话框的应用程序CMyEdit,打开资源视图,删除对话框上自带的确定和取消按钮.然后添加一编辑框控件,将其ID修改为IDC_MY_EDIT,通过类向 ...

  6. 【JavaScript从入门到精通】第三课

    第三课 初探JavaScript魅力-03 函数传参 上节课的时候我们已经讲了什么是函数,实际上,函数在功能上就类似于css的class一样,将一段代码包裹起来使用.为了让函数的功能更加的丰富和实用, ...

  7. 【JavaScript从入门到精通】第一课

    第一课 初探JavaScript魅力-01 JavaScript是什么 如今我们打开一个大型的网站,都会有很多JS效果的功能和应用.对于学过CSS+HTML的同学,即使是像淘宝那样的网站,用一两天时间 ...

  8. ansible基础配置

    1.基础配置 1.1.环境 主机配置 ansible版本:2.7.4 控制端:centos7.4,IP:192.168.1.213,主机名:operation 被控制端: centos6.5,IP:1 ...

  9. bootstrap-table的一些基本使用及表内编辑的实现

    最近工作需要接触了bootstrap-table 所以研究了一下,并做了笔记,红色位置要特别注意 前端主要使用了 jquery bootstrap-table  bootstrap-edittable ...

  10. vue 画二维码

    首先安装一下相关的插件 qrcode2 npm install --save qrcode2 然后在需要画二维码的页面引入一下 import QRCode from 'qrcode2' 最后在meth ...