zme*_*tah 1 c linux stack multithreading pthread-exit
我正在研究一个多线程项目,我需要在代码中的某个位置复制一个线程的堆栈(我需要一个指向它的指针).因为在退出这个线程后我将需要该指针(并且它的堆栈被释放).如果我能以某种方式告诉pthread_exit()不要释放线程堆栈,它也可以完成这项工作!
PS:这背后的原因是我希望setcontext(ucontext_t*)稍后在这个线程实际死亡时使用.
如上所述,这可能是XY问题的一个例子.但是,解决方案是pthread_mutex_t在每个线程中使用a .
创建线程的函数将创建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);
Run Code Online (Sandbox Code Playgroud)
线程功能如下......
void fun(void* arg) {
pthread_mutex_t* mutex = (pthread_mutex_t*) arg;
pthread_mutex_lock(mutex);
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
如果您需要以异步方式做到这一点,你可以注册一个信号处理程序SIGUSR1,并SIGUSR2与使用pause取消预定的线程.
signal(SIGUSR1, on_usr1);
signal(SIGUSR2, on_usr2);
void on_usr1(int sig) {
pause();
}
void on_usr2(int sig) {
}
Run Code Online (Sandbox Code Playgroud)
然后pthread_kill用来将信号提升到线程......
pthread_kill(tid, SIGUSR1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |