当我执行以下代码时,每次重新编译和重新执行后,答案(输出)都不一样。这是什么原因?
#include <iostream>
#include <cstdlib>
//#include <pthread.h>
using namespace std;
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
cout << "Hello World! Thread ID, " << tid << endl;
pthread_exit(NULL);
}
int main ()
{
pthread_t threads[NUM_THREADS];
int rc;
int i;
for( i=0; i < NUM_THREADS; i++ ){
cout << "main() : creating thread, " << i << endl;
rc = pthread_create(&threads[i], NULL,
PrintHello, (void *)i);
if (rc){
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}
}
pthread_exit(NULL);
}
g++ test.cpp -o 测试 -lpthread ./测试
输出1:
main() : creating thread, 0
main() : creating thread, 1
main() : creating thread, 2
Hello World! Thread ID, 0
main() : creating thread, 3
Hello World! Thread ID, 1
Hello World! Thread ID, 2
main() : creating thread, 4
Hello World! Thread ID, 3
Hello World! Thread ID, 4
g++ test.cpp -o 测试 -lpthread ./测试
输出2:
main() : creating thread, 0
main() : creating thread, 1
main() : creating thread, 2
main() : creating thread, 3
Hello World! Thread ID, 0
main() : creating thread, 4
Hello World! Thread ID, 3
Hello World! Thread ID, 2
Hello World! Thread ID, 4
Hello World! Thread ID, 1
最佳答案
由于你的线程不是同步的,所以执行顺序不是精确确定的,取决于你的执行上下文,比如同时运行的其他进程等,每次运行时可能会有所不同程序。
关于c++ - 为什么在重新执行我的多线程代码后输出不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21796669/