加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 19:23:39 所属栏目:Linux 来源:网络整理
导读:我正在尝试实现微控制器的仿真.该仿真并不意味着对一个特定微控制器进行时钟周期精确表示,而是检查代码的一般正确性. 我想过有一个执行普通代码的“主线程”和一个执行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之后的内容接受了答案,这是一个不能在任何其他场景中使用的特定场景.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读