zoukankan      html  css  js  c++  java
  • 第九章 线程与内核对象的同步(5)

    五、互斥对象内核对象

    互斥对象内核对象,能够确保线程拥有对单个资源的互斥访问权。互斥对象包含使用计数、线程ID(用于标识系统中的哪个线程当前拥有互斥对象)、递归计数器(用于指明该线程拥有互斥对象的次数)。

    互斥对象的行为特性与关键代码段相同,但是互斥对象属于内核对象(不同进程中的多个线程能够访问单个互斥对象,并且线程在等待访问资源时可以设定一个超时值)。而关键代码段则属于用户方式对象。互斥对象的运行速度比关键代码段要慢。

    互斥对象内核对象用于保护由多个线程访问的内存块。保证访问内存块的任何线程拥有对该内存块的独占访问权,这样就能够保证数据的完整性。

    互斥对象的使用规则:线程ID=0,互斥对象不为任何线程所有,发出通知信号;ID!=0,一个线程拥有互斥对象,不发出互斥信号通知事件;允许互斥对象内核对象使用异常。

    1、创建互斥对象内核对象

    要使用互斥对象,必须有一个进程首先调用CreateMutex

    HANDLE CreateMutex(PSECURITY_ATTRIBUTES psa, BOOL fInitialOwner, PCTSTR pszName)

    fInitialOwner设置互斥对象的初始状态,FALSE(通常值)表明互斥对象ID与递归计数器均置为0TRUE表示线程ID设为调用调用线程的ID,递归计数设1

    HANDLE OpenMutex(DWORD fdwAccess, BOOL bInheritHandle, PCTSTR pszName)

    另一个进程可以通过OpenMutex获得它自己进程与现有互斥对象相关的句柄。

    2、释放互斥对象内核对象

    BOOL ReleaseMutex(HANDLE hMutex)

    调用线程将查看本线程ID与互斥内核对象ID是否一致,是则释放,否则返回FALSEERROR_NOT_OWNER),什么都不做。只有互斥对象能够跟踪哪个线程成功地等待到该对象(其它对象不对此进行跟踪)。

  • 相关阅读:
    大显示器有用了,看报纸很爽
    密码概率(转)
    什么是社会工程攻击(转)
    C# 在购物车系统中生成不重复的订单号[转]
    jQuery选择器总结[转]
    多种下拉框功能插件
    异步提交
    MVC3开发常常遇到的问题及常常使用到的代码片段
    MVC3怎样设置ntext字段?
    jQuery子页面刷新父页面局部刷新+整体刷新 [转]
  • 原文地址:https://www.cnblogs.com/dyufei/p/2573982.html
Copyright © 2011-2022 走看看