当您有以下代码时:
#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);
}
the out put will be
main() : creating thread, 0
main() : creating thread, 1
main() : creating thread, 2
main() : creating thread, 3
main() : creating thread, 4
Hello World! Thread ID, 0
Hello World! Thread ID, 1
Hello World! Thread ID, 2
Hello World! Thread ID, 3
Hello World! Thread ID, 4
我想知道为什么不是
main() : creating thread, 0
Hello World! Thread ID, 0
main() : creating thread, 1
Hello World! Thread ID, 1
....
为什么我们创建线程,它立即执行?
另一个问题线程0、1、2、3、4,这些线程是否有可能以随机顺序执行?例如,输出将是
Hello World! Thread ID, 1
Hello World! Thread ID, 4
Hello World! Thread ID, 0
Hello World! Thread ID, 2
Hello World! Thread ID, 3
非常感谢您的回答!
最佳答案
线程系统的要点是它允许动作并行运行。最终的含义是,您有多个任务想同时执行,而不必关心完成这些任务的相对顺序。
如果您希望任务只按一个顺序发生,那么请问问自己,线程的意义是什么,您想从中摆脱什么。如果您有4个线程,但是在任何给定的时刻,只有一个在执行,而其他在等待轮到执行,那么您可能还希望程序在一个线程中执行。
线程在顺序无关紧要的假设下运行。操作系统为您提供的保证是,除非有任何同步原语,否则操作系统将为每个线程(通过调度)提供足够的时间以使它在应执行的任何操作上取得进展。
诸如pthread_create
之类的调用告诉操作系统生成一个新线程,该线程将执行某些操作。您无法控制:
操作系统何时生成线程,或者
生成线程后,此时操作系统将为其赋予时间片以执行足够的指令以到达打印语句。
关于c++ - C++中的基本多线程(执行命令),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27584185/