中断主线程并要求它做某事
Posted
技术标签:
【中文标题】中断主线程并要求它做某事【英文标题】:interrupt main thread and ask it to do something 【发布时间】:2015-07-15 09:38:15 【问题描述】:我想知道是否可以中断主线程并要求它执行一些回调。完成回调后,主线程应该继续它正在做的事情。
例如,我们有 2 个线程 t1 和 m1(主线程)。 t1 将中断 m1(主线程)并要求它调用带有一些参数的函数。 m1(主线程)将停止执行它之前正在执行的操作并开始执行该函数。完成该功能后,它会恢复到之前的状态。
我想复制硬件中断的作用。我有一个从文件中读取数据的线程。然后它应该要求主线程调用一个函数。主线程将做一些事情。它应该停止这样做并开始执行该功能。完成后,主线程应该继续它正在做的事情
【问题讨论】:
基本上没有,但实际上也没有。 只需编写您想要的代码。你遇到了什么障碍? (如果您需要更多帮助,了解您正在使用的线程库或标准将非常有用。C++11?POSIX?Windows?) 基本上我想要硬件中断的作用。我有一个从文件中读取数据的线程。然后它应该要求主线程调用一个函数。主线程将做一些事情。它应该停止这样做并开始执行该功能。完成后,主线程应该继续它正在做的事情 我现在正在使用 windows 库。我稍后会为 linux (pthread) 做这个 我已经更新了我的问题。请看 【参考方案1】:我认为一个干净的方法是让 t1 添加到一个操作队列,t2 在其处理循环中可以安全地开始执行其他操作的点进行检查。
在 POSIX 系统上,您可以使用信号。例如,以下启动第二个线程,当主线程在做其他工作时,第二个线程向它发送一个SIGUSR1
信号。主线程处理它并恢复操作。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <signal.h>
void* other_thread(void* main_thread)
printf("other_thread: %x\n", pthread_self());
usleep(250*1000);
printf("sending SIGUSR1 to main thread...\n");
pthread_kill((pthread_t) main_thread, SIGUSR1);
return NULL;
void my_handler(int signal)
printf("my_handler: %x\n", pthread_self());
sleep(2);
printf("back to main\n");
int main(int argc, char**argv)
signal(SIGUSR1, my_handler);
pthread_t thread1;
pthread_create(&thread1, NULL, other_thread, pthread_self());
printf("main: %x\n", pthread_self());
int x = 0;
while (1)
// sleep(1), or do some work, or:
x++;
if (x % 10000000 == 0) printf("boo\n");
【讨论】:
基本上我想要硬件中断的作用。我有一个从文件中读取数据的线程。然后它应该要求主线程调用一个函数。主线程将做一些事情。它应该停止这样做并开始执行该功能。完成后,主线程应该继续使用队列做的事情是选项,但我正在寻找的是像硬件一样的中断 在 Linux 上,我会说尝试看看使用 signals 是否有帮助。"`SIGUSR1 和 SIGUSR2 信号被预留给您以供您使用任何您想要的方式。它们对于简单的操作很有用进程间通信,如果您在接收信号的程序中为它们编写信号处理程序。"以上是关于中断主线程并要求它做某事的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 executor.execute 和 future.get() 结束任务(使线程超时)(通过上升中断)而不阻塞主线程