sla*_*ast 3 c c++ multithreading pthreads
我写了一个小程序来查看创建线程所需的开销.
这是程序(我写得很快,所以它不是最好的):
#include <iostream>
#include <pthread.h>
void * lala(void * cake) {
int * hi = (int *)cake;
std::cout << *hi << '\n';
}
int main(void) {
pthread_t thread;
for (int i = 0;i < 10000;i = i + 1) {
pthread_create(&thread,0,lala,&i);
}
}
Run Code Online (Sandbox Code Playgroud)
它基本上启动10000个线程并传递它们的线程号,每个线程输出它的号码.
每次运行程序时输出都会改变,但是我注意到有一个部分从未改变过:
在输出结束时,我总是发现:
...
9994
9995
9996
9997
9998
9999
0
Run Code Online (Sandbox Code Playgroud)
这意味着第一个线程最后完成...
所以,我的朋友们,有没有人对这种现象有可能的解释?
首先,您将局部变量的地址传递给线程,该线程不断变化.因此,当线程有时间阅读它时,内容i将会被更改.为什么你不能只传递i而不是&i,变量只有4个字节(即适合指针)?
其次,您不应该担心操作系统如何安排您的线程.