c++ - 使用 pthread_create() 创建超过 1000 个线程

标签 c++ posix

我正在尝试使用 pthread_create() 函数创建 1000 个线程。

这是我正在使用的声明:

for (int i=0 ; i <1000; i++)
{
   retValue = pthread_create(&threadId, NULL, simplethreadFunction, NULL);
}

每次运行这个 for 循环时,它都会创建一个新线程吗?

这是一件简单的事情。但我无法理解。

最佳答案

Everytime this for-loop runs does it create a new thread?

是的,确实如此。

This is a simple thing. But I'm unable to understand it.

我再补充几点:

  1. 函数 pthread_create 的第一个参数是指向 pthread_t 的指针类型。基本上,您将一个地址传递给该函数,该函数使用该地址来分配“某些内容”。

    当此函数创建线程时,会为该线程创建一个“不透明的唯一标识符”,并且您传递的指针将指向此位置,以便您稍后可以在需要时访问它。

  2. 如果您将传递同一个指针 1000 次,您将只能访问 1000 个线程中创建的一个(最后一个)线程的唯一标识符,因为每次前一个值都会超过写的。

  3. 如果您想在线程上执行进一步操作(例如加入等),则需要此唯一值。

  4. 有关此函数和其他线程相关函数的详细信息,您可以查看 thisthis .

  5. 不要忘记在主上下文中调用 pthread_exit,否则整个程序(包括创建的线程)可能会在所有线程完成之前终止。

另外关于时间,据我认为,这件事可能不会对创建时间产生任何影响,只会降低您创建的线程的可用性。另外,这次您计算的时间不是创建 1000 个线程的时间,将取决于许多其他因素,例如平台/实现等。

关于c++ - 使用 pthread_create() 创建超过 1000 个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13190910/

相关文章:

c++ - 编译后在 OpenCV 中包含额外的库

c++ - C和C++中long double和double的区别

c - 如何获取网络设备统计信息?

c - 使用 pipeline/dup2 与 Python 子进程通信

c++ - O_DIRECT 与 AIO_RAW

c++ - 如何在 Mac OS X 中获取 aio 信号处理程序的用户数据

c++ - 需要解释一下代码

c++ - 使用 decltype 推导局部变量的类型时,局部变量是左值吗?

c++ - C++ 中的错误逻辑

c - 在 C 中使用 POSIX 正则表达式