考虑下一段代码:
#include <iostream>
#include <pthread.h>
#include <string.h>
using namespace std;
pthread_t tid[3];
void* printMe(void* arg)
{
pthread_t id = pthread_self();
if(pthread_equal(id,tid[0]))
{
cout << "first thread's in function" << endl;
}
if(pthread_equal(id,tid[1]))
{
cout << "second thread's in function" << endl;
}
if(pthread_equal(id,tid[2]))
{
cout << "third thread's in function" << endl;
}
}
int main() {
int i = 0;
int err;
while (i < 3)
{
err = pthread_create(&(tid[i]), NULL, printMe, NULL);
if (err != 0)
{
cout << "failed to create thread number " << i << strerror(i) << endl;
}
else
{
cout << "main() : creating thread number " << i << endl;
}
i++;
}
return 0;
}
我不明白线程什么时候调用他的函数? 这是正确的,因为它的创建? (同时,主线程继续创建其他线程?)
此外,我不明白输出 -
main() : creating thread number 0
main() : creating thread number 1
main() : creating thread number 2
first thread's in function
first thread's in function
第一个线程调用了他的函数两次,而其他线程都没有调用它们。
然后,我再次编译并得到 -
main() : creating thread number 0
first thread's in function
main() : creating thread number 1
second thread's in function
main() : creating thread number 2
再次,第三个线程怎么样?
为什么“有时”线程无法调用它们的函数?
答案 0 :(得分:2)
您的main()
在返回之前没有加入线程,从而终止程序,因此无论您看到任何给定线程的输出,它都或多或少是随机的。
答案 1 :(得分:2)
您的main函数在线程运行之前终止。在从main返回之前,您必须等待所有线程的结束。 请参阅此问题:How can I wait for any/all pthreads to complete?
注意:你把它标记为C ++,没有使用C ++ 11或boost的线程的任何理由?