2

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

这是我正在使用的语句:

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

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

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

4

1 回答 1

4

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

是的,它确实。

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

我再补充几点:

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

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

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

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

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

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

同样关于时间,据我所知,这件事可能对创建时间没有任何影响,只会降低您创建的线程的可用性。此外,您计算的这个时间不是创建 1000 个线程的时间,这将取决于许多其他因素,如平台/实现等。

于 2012-11-02T07:59:48.993 回答