是否可以立即启动由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
信号。