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

前端之家收集整理的这篇文章主要介绍了linux – 如何挂起另一个线程(不是当前线程)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

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

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

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

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

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

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

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

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

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

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

编辑:

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

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

原文链接:https://www.f2er.com/linux/440709.html

猜你在找的Linux相关文章