繁体   English   中英

如何在退出之前保存线程堆栈?

[英]how to save a thread stack before it exits?

我正在开发一个多线程项目,我需要在代码的某个位置复制线程堆栈(我需要一个指向它的指针)。 因为退出该线程后,我将需要该指针(并且它的堆栈已释放)。 如果我能以某种方式告诉pthread_exit()不释放线程堆栈,它也可以完成工作!

PS:这背后的原因是,当此线程实际上已死时,我想稍后再使用setcontext(ucontext_t*)

如前所述,这可能是XY问题的情况。 但是,解决方案是在每个线程中使用pthread_mutex_t

创建线程的函数将创建pthread_mutext_t并将其传递给线程。

pthread_t tid;
pthread_mutext_t mutex;

pthread_mutex_init(&mutex, NULL);
pthread_mutex_lock(&mutex);

pthread_create(&tid, NULL, fun, &mutex);

// do stuff

pthread_mutex_unlock(&mutex);

线程功能如下所示...

void fun(void* arg) {

  pthread_mutex_t* mutex = (pthread_mutex_t*) arg;
  pthread_mutex_lock(mutex);

  // do stuff
}

如果需要异步执行此操作,则可以为SIGUSR1SIGUSR2注册信号处理程序,并使用pause SIGUSR2线程。

signal(SIGUSR1, on_usr1);
signal(SIGUSR2, on_usr2);

void on_usr1(int sig) {

  pause();
}

void on_usr2(int sig) {
}

然后使用pthread_kill向线程发出信号...

pthread_kill(tid, SIGUSR1);

正如评论者所说,保存线程堆栈以在以后恢复它非常困难。 如果您需要阻止线程被调用,则可以尝试使用锁“暂停”它。 在这里查看示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM