gpt4 book ai didi

c++ - 使用 pthread_create 时出现奇怪的输出

转载 作者:行者123 更新时间:2023-11-30 01:44:08 25 4
gpt4 key购买 nike

考虑下一段代码:

#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

再一次,第三个线程呢?

为什么“有时”线程无法调用它们的函数?

最佳答案

您的主函数在线程运行之前终止。在从主线程返回之前,您必须等待所有线程结束。看到这个问题:How can I wait for any/all pthreads to complete?

注意:您将其标记为 C++,有什么理由不使用 C++11 或 boost 中的线程?

关于c++ - 使用 pthread_create 时出现奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36737836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com