WaitForSingleObject和max。 等待线程
我只在英特尔的一篇文章中注意到以下短语:
WaitForSingleObject的一个缺点是它总是会获得一个内核锁,因此它是否进入特权模式(环0)。 即使指定了0超时,该API也会进入Windows内核。 这种锁定方法的另一个缺点是,它只能处理64个线程,试图一次锁定一个对象
如果我正确地理解了它,这个代码就有一个UB:
#include <Windows.h>
#include <cstdlib>
#include <iostream>
#include <vector>
#define THREAD_COUNT 100
HANDLE g_mutex;
DWORD WINAPI foo(LPVOID lpParameter)
{
WaitForSingleObject(g_mutex, INFINITE);
return 0;
}
int main()
{
g_mutex = CreateMutex(
NULL, // default security attributes
FALSE, // initially not owned
NULL); // unnamed mutex
if (g_mutex == NULL)
{
return EXIT_FAILURE;
}
WaitForSingleObject(g_mutex, INFINITE);
std::vector<HANDLE> threads;
for (int i = 0; i < THREAD_COUNT; i++)
{
HANDLE th = CreateThread(
NULL, // default security attributes
0, // default stack size
(LPTHREAD_START_ROUTINE)foo,
NULL, // no thread function arguments
0, // default creation flags
NULL); // don't receive thread identifier
if (th == NULL)
{
return EXIT_FAILURE;
}
threads.push_back(th);
}
while (true)
{
Sleep(100);
}
}
因为它强制超过64个线程等待特定的资源(在我的情况下,互斥体)。
我知道这个限制存在于WaitForMultipleObjects函数中,但在文章中提到了WaitForSingleObject函数。
我对吗?
链接地址: http://www.djcxy.com/p/62481.html