gpt4 book ai didi

c - 如何在不阻塞太久的情况下检测从 pthread_create 提前退出?

转载 作者:IT王子 更新时间:2023-10-29 01:17:23 24 4
gpt4 key购买 nike

我有一个线程叫做mainloop

int run_mainloop;

void* mainloop(void* param)
{
// local vars
// initialize local vars

while(run_mainloop)
{
// run mainloop
}

return 0;
}

线程从名为client_open 的函数启动,即

int client_open()
{
run_mainloop = 1;
return pthread_create(&thread, NULL, mainloop, NULL);
}

但是,在 mainloop 中,如果初始化局部变量失败,我需要立即通知 client_open 提前退出。

pthread_join 不合适,因为它会阻塞,而我不能让 client_open 阻塞。如果是在返回之前等待一小段时间就可以了。

如果不使用会阻塞的 pthread_join,我怎么能以一种很好的方式做到这一点。我希望能够得到返回码。

最佳答案

使用 pthread_tryjoin_np 是不正确的:新线程可以在 pthread_create 返回和新线程实际执行初始化代码之间任意延迟。

如果您在该延迟期间pthread_tryjoin_np,连接将失败并且您会认为一切都“正常”,而实际上并非如此。

您想要的是一个条件:client_open 将等待它,并且 mainloop 将向它发出信号(在完成初始化后)。

关于c - 如何在不阻塞太久的情况下检测从 pthread_create 提前退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8705784/

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