在共享库构造函数

时间:2018-04-05 04:47:20

标签: c linux pthreads

我想在我的一个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 ++。

1 个答案:

答案 0 :(得分:0)

你的主线程没有等待线程完成工作。在pthread_create之后添加pthread_join。

由于我没有使用属性((构造函数)),任何时候都过去了,我可以对它做很多评论,但你可以在属性<中添加pthread_join /强>((析构函数))。