使用POSIX定时器后程序无法退出

时间:2011-04-06 13:43:48

标签: c timer pthreads posix glibc

考虑以下计划:

#define _POSIX_C_SOURCE 200809L
#include <time.h>
#include <pthread.h>
#include <signal.h>

void timerfunc(union sigval val) { }

int main()
{
        struct sigevent sev = { .sigev_notify = SIGEV_THREAD,
                .sigev_notify_function = timerfunc };
        timer_t t;
        timer_create(CLOCK_REALTIME, &sev, &t);
        timer_delete(t);
        pthread_exit(0);
}

与glibc相关联,它不仅无法终止,而且除kill -9 / SIGKILL之外无法终止。标准是否允许这种行为?除了总是明确地退出流程(而不是只退出所有线程)之外,是否有良好的解决方法?

2 个答案:

答案 0 :(得分:3)

好吧,POSIX specifically says它是

  

......无法确定   创建线程的生命周期......

这意味着允许任何生命周期。

SIGEV_THREAD简直就是坏事,应该避免。

答案 1 :(得分:0)

pthread_exit是否与主进程线程一起使用?我一直想知道pthread函数是否适用于不是由pthread_create创建的线程。