是否可以立即启动由pthread_create创建的线程,而不等待~300us启动?现在,现有的代码正在通过向线程发送一个SIGHUP线程进行“启动”,但是,副作用是,如果主进程没有为SIGHUP设置信号处理程序,则进程将退出…
我可以让它处理SIGHUP,但是我想知道是否有比这样做更好的解决方案…
注:问题的最初版本是“300毫秒”,因此有人评论说3亿秒长得可笑。300微秒更合理。

最佳答案

在修改了几个小时之后,另一种方法来存档我需要的东西。顺便说一句,我试着按照@nos的建议使用sched_yield,但没有产生任何不同的行为。
作为一个更新,我想指出我使用的代码正在执行一个do...while循环,通过发送SIGHUP来探测pthread是否完成。
我的问题的解决方案是发送一个自定义的sigaction,如下所示:
有一个虚拟信号处理程序:

void thread_signal_handler(int sig) { }

然后在我工作的图书馆里,在发出SIGHUP之前:
...
struct sigaction sa;
sa.sa_handler = dummy_handler;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
sigaction(SIGHUP, &sa, NULL);
pthread_kill(tid, SIGHUP);
...

这样做,我的应用程序不需要处理SIGHUP信号。

07-24 13:33