我必须开发一个试图模拟嵌入式目标的执行流程的应用程序。这个目标有两个优先级:最高优先级最低优先级。低优先级由循环调度程序管理,循环调度程序依次为每个线程提供1ms的执行时间。优雅地(即最终合作)暂停线程执行
我的目标是编写一个库,它提供我的目标上可用的thread_create,thread_start和所有系统调用,并使用POSIX函数在本地在标准PC上重现行为。
因此,当一个高优先级的线程执行时,低优先级的线程应该被挂起,无论他们在那个时刻正在做什么。低优先级线程实施的责任是确保它不会受到干扰。
我现在暂停一个线程通常是不安全的,这就解释了为什么我没有找到任何“挂起(pid)”函数。
我基本上假设有两个解决问题的方案:
- 查找的方式暂停低优先级的线程时,高优先级的线程启动(并恢复他们的时候没有更多的高优先活动)
-periodically调用非常小的“suspend_if_necessary”函数在我的低优先级代码中无处不在,每当必须启动高优先级时,请等待所有低优先级进程调用该函数并暂停,作为单个高优先级线程执行,然后全部恢复。
即使它不是很干净,我很喜欢第二种解决方案,但仍然有一个问题:如何在不改变所有代码的情况下在任何地方调用该函数? 我不知道是否有一个简单的方法来做到这一点,有点像调试代码所做的那样:在执行的每一行添加一个钩子调用,检查标志并在标志更改时运行某些特定代码?
,我会非常高兴,如果有一个简单的解决这个问题,因为我真正需要的是代表与目标的执行流程的行为......
由于提前,
岣嵝。
顺便说一下,高级prio线程只能由3个源启动:由低级prio线程,外部中断或睡眠后启动。所有这些源都驻留在我的库中,所以我“知道”它并可以立即将任何消息发送到其他线程。 – Goulou 2011-02-10 15:41:38