码迷,mamicode.com
首页 > 编程语言 > 详细

C++技术问题总结-第3篇 线程同步

时间:2014-08-07 15:49:10      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:style   使用   io   strong   数据   问题   cti   工作   

线程同步的方法

线程同步有多种方法。
用户模式下的线程同步:关键段(critcal section)。
内核模式下的线程同步:事件、计时器、信号量、互斥量。

1.关键段
用户模式下的同步,主要API如下。
InitializeCriticalSection、DeleteCriticalSection、EnterCriticalSection、LeaveCriticalSection。

2.事件
常用于:一个线程初始化工作,然后再触发另一个线程让它工作。主要API如下。
CreateEvent、SetEvent(设为触发)、ResetEvent(设为未触发)。

事件分为两种。
手动重置事件:正在等待该事件的所有线程变成可调度。
自动重置事件:只有一个等待线程可调度。

数据结构伪码描述
{
    使用计数;
    布尔值;//标识是手动还是自动重置
    布尔值;//是否触发
}


3.计时器
可等待计时器,它们会在某个指定时间触发,或每隔一段时间触发一次。主要API如下。
CreateWaitableTimer、OpenWaitableTimer、SetWaitableTimer。

4.信号量
信号量内核对象用来对资源进行计数。主要API如下。
CreateSemaphore、OpenSemaphore、ReleaseSemaphore。

数据结构伪码描述
{
    使用计数;
    最大资源计数;
    当前资源计数;//大于0时触发
}


5.互斥量
互斥量内核对象用来确保一个线程独占对一个资源的访问。主要API如下。
CreateMutex、OpenMutex、ReleaseMutex。

数据结构伪码描述
{
    使用计数;
    线程ID;//为0时触发
    递归计数;//该线程占用互斥量的次数
}

C++技术问题总结-第3篇 线程同步,布布扣,bubuko.com

C++技术问题总结-第3篇 线程同步

标签:style   使用   io   strong   数据   问题   cti   工作   

原文地址:http://blog.csdn.net/segen_jaa/article/details/38418381

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!