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

上一篇: WaitForSingleObject and max. waiting threads

下一篇: Is a Windows Timer as accurate as Sleep()?