• 第九章 线程与内核对象的同步(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),什么都不做。只有互斥对象能够跟踪哪个线程成功地等待到该对象(其它对象不对此进行跟踪)。

  • 相关阅读:
    trie树
    基数排序
    CF724E Goods transportation 最小割 DP
    [CQOI2009]跳舞 网络流
    NOIP2018爆零记
    斜率优化
    CF311B Cats Transport 斜率优化DP
    逆元
    卡特兰数
    【BZOJ】【1565】【NOI2009】PVZ 植物大战僵尸
  • 原文地址:https://www.cnblogs.com/dyufei/p/2573982.html
Copyright © 2020-2023  润新知