我想在我的一个LD_PRELOADed共享库构造函数中创建一个线程。我目前有以下内容。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
void* worker(void* t) {
sleep(1);
printf("Running worker..\n");
return NULL;
}
__attribute__((constructor))
void spawn() {
pthread_t t;
printf("[INFO] In the constructor..\n");
int rc = pthread_create(&t, NULL, worker, (void *)NULL);
if (rc){
printf("[FATAL] Failed spawn the thread..\n");
exit(-1);
}
}
但即使构造函数被调用,该线程似乎也没有运行。在不推荐使用main之前产生线程吗?我尝试了gcc和g ++。
答案 0 :(得分:0)
你的主线程没有等待线程完成工作。在pthread_create之后添加pthread_join。
由于我没有使用属性((构造函数)),任何时候都过去了,我可以对它做很多评论,但你可以在属性<中添加pthread_join /强>((析构函数))。