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

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

概述我正在尝试实现微控制器的仿真.该仿真并不意味着对一个特定微控制器进行时钟周期精确表示,而是检查代码的一般正确性. 我想过有一个执行普通代码的“主线程”和一个执行ISR代码的第二个线程.每当需要运行ISR时,ISR线程就会挂起“主线程”. 当然,我想要一个阻止中断的功能. 我想用一个互斥体解决这个问题,ISR线程只要执行ISR代码就会保留,而主线程只要“中断被阻塞”就会保存它. 然后可以通过暂停但杀 我正在尝试实现微控制器的仿真.该仿真并不意味着对一个特定微控制器进行时钟周期精确表示,而是检查代码的一般正确性.

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

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

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

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

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

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

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

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

解决方法 不知何故,我认为发送其他线程SIGStop的工作原理.

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

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

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

编辑:

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

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

总结

以上是内存溢出为你收集整理的linux – 如何挂起另一个线程(不是当前线程)?全部内容,希望文章能够帮你解决linux – 如何挂起另一个线程(不是当前线程)?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1030416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存