linux – 如何挂起另一个线程(不是当前线程)?

我正在尝试实现微控制器的仿真.该仿真并不意味着对一个特定微控制器进行时钟周期精确表示,而是检查代码的一般正确性.

我想过有一个执行普通代码的“主线程”和一个执行ISR代码的第二个线程.每当需要运行ISR时,ISR线程就会挂起“主线程”.

当然,我想要一个阻止中断的功能.
我想用一个互斥体解决这个问题,ISR线程只要执行ISR代码就会保留,而主线程只要“中断被阻塞”就会保存它.

然后可以通过暂停但杀死主线程(以及启动执行POR功能的新线程)来实现POR(上电复位).

Windows API提供了必要的功能.
但似乎不可能使用posix线程(在linux上)执行上述操作.

我不想改变实际的硬件独立微控制器代码.因此,插入任何内容以检查挂起的中断都不是一种选择.

在非性能良好的点接收中断是可取的,因为这也发生在微控制器上(除非阻止中断).

有没有办法在Linux上挂起另一个线程? (我认为,调试器必须以某种方式使用该选项.)

拜托,不要告诉我这是一个坏主意.我知道在大多数情况下都是如此.但主代码不使用标准库或锁/互斥量/信号量.

最佳答案
不知何故,我认为发送其他线程SIGSTOP的工作原理.

但是,编写一些涉及senaogires.mutexes和全局变量的线程通信要好得多.

你看,如果你在malloc()中暂停另一个线程,你调用malloc() – >僵局.

我是否提到过很多C标准库函数,更不用说你使用的其他库了,会在你背后调用malloc()吗?

编辑:

嗯,没有标准库代码.也许使用来自信号处理程序的setjmp / longjump()来模拟POR和一个模拟中断的信号处理程序.

对于那些让人沮丧的人:EDIT之后的内容接受了答案,这是一个不能在任何其他场景中使用的特定场景.

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...