(摘自windows核心编程之用内核对象进行线程同步)
2014-06-18 16:30
387 查看
信号量内核对象(Windows核心编程 p.251)
信号量内核对象用来对资源进行计数。包含一个使用计数,还包含另外两个32位值:一个最大资源计数和一个
当前资源计数。
创建信号量内核对象函数:
HANDLE CreateSemaphore(
PSECURITY_ATTRIBUTE psa,
LONG lInitialCount,
LONG lMaximumCount,
PCTSTR pszName);
参数lMaximumCount 告诉系统应用程序能处理的资源的最大数量。
参数lInitialCount 表示这些资源中一开始有多少个可供使用。
信号量的规则如下:
<如果当前资源计数大于0,那么信号量处于触发状态。
<如果当前资源计数等于0,那么信号量处于未触发状态。
<系统绝对不会让当前资源计数变为负数。
<当前资源计数绝对不会大于最大资源计数。
//最大资源数4,一开始可供使用的资源为0个,因为当前资源计数器可供使用的资源为0个,所以
//信号量未被触发。任何等待该信号量的线程将处于等待状态。
g_hSemaphoreBufferFull = CreateSemaphore(NULL, 0, 4, NULL);
线程通过调用ReleaseSemaphore来递增信号量的当前资源计算。
BOOL ReleaseSemaphore(
HANDLE hSemaphore,
LONG lReleaseCount,
PLONG plPreviousCount
)
这个函数只是把lReleaseCount的值加到信号量的当前资源计数上。通常我们会传1给lReleaseCount参数。
为了获得对被保护资源的访问权,线程要调用一个等待函数(WaitForSingleObject)并传入信号量句柄。在内部,
等待函数会检查信号量的当前资源数,如果它的值大于0(信号量处于触发状态),那么函数会把计数器减一,
并让调用线程继续运行。
线程通过调用ReleaseSemaphore来递增信号量的当前资源计数:
信号量内核对象用来对资源进行计数。包含一个使用计数,还包含另外两个32位值:一个最大资源计数和一个
当前资源计数。
创建信号量内核对象函数:
HANDLE CreateSemaphore(
PSECURITY_ATTRIBUTE psa,
LONG lInitialCount,
LONG lMaximumCount,
PCTSTR pszName);
参数lMaximumCount 告诉系统应用程序能处理的资源的最大数量。
参数lInitialCount 表示这些资源中一开始有多少个可供使用。
信号量的规则如下:
<如果当前资源计数大于0,那么信号量处于触发状态。
<如果当前资源计数等于0,那么信号量处于未触发状态。
<系统绝对不会让当前资源计数变为负数。
<当前资源计数绝对不会大于最大资源计数。
//最大资源数4,一开始可供使用的资源为0个,因为当前资源计数器可供使用的资源为0个,所以
//信号量未被触发。任何等待该信号量的线程将处于等待状态。
g_hSemaphoreBufferFull = CreateSemaphore(NULL, 0, 4, NULL);
线程通过调用ReleaseSemaphore来递增信号量的当前资源计算。
BOOL ReleaseSemaphore(
HANDLE hSemaphore,
LONG lReleaseCount,
PLONG plPreviousCount
)
这个函数只是把lReleaseCount的值加到信号量的当前资源计数上。通常我们会传1给lReleaseCount参数。
为了获得对被保护资源的访问权,线程要调用一个等待函数(WaitForSingleObject)并传入信号量句柄。在内部,
等待函数会检查信号量的当前资源数,如果它的值大于0(信号量处于触发状态),那么函数会把计数器减一,
并让调用线程继续运行。
线程通过调用ReleaseSemaphore来递增信号量的当前资源计数:
相关文章推荐
- 摘自windows核心编程之用内核对象进行线程同步
- (摘自windows核心编程之用内核对象进行线程同步)
- 《Windows核心编程 5th》读书笔记----第9章 用内核对象进行线程同步
- 《Windows核心编程》——九 用内核对象进行线程同步
- windows核心编程-用内核对象进行线程同步
- Windows核心编程(八)用内核对象进行线程同步
- Windows核心编程 用内核对象进行线程同步
- Windows核心编程:用内核对象进行线程同步
- <<Windows核心编程(第五版)>>第九章用内核对象进行线程同步:9.3事件内核对象
- Windows核心编程:(六)用内核对象进行线程同步
- windows核心编程-9.用内核对象进行线程同步
- 《Windows核心编程系列》八谈谈用内核对象进行线程同步
- 第九章:用内核对象进行线程同步(二) .
- 第9章 用内核对象进行线程同步(3)_信号量(semaphore)、互斥对象(mutex)
- 第9章 用内核对象进行线程同步(2)_可等待计时器(WaitableTimer)
- 《windows核心编程学习笔记》——使用互斥量变量内核对象进行线程同步
- 第九章 使用内核对象进行线程同步
- 第9章 用内核对象进行线程同步(1)_事件对象(Event)
- Windows-核心编程-09-如何用内核对象进行线程同步-事件内核对象