【发布时间】:2011-02-10 13:41:40
【问题描述】:
我必须开发一个尝试模拟嵌入式目标的执行流程的应用程序。该目标有 2 个优先级:最高优先级优先于最低优先级。低优先级由轮询调度程序管理,轮流调度程序为每个线程提供 1ms 的执行时间。
我的目标是编写一个库,提供 thread_create、thread_start 和我的目标上可用的所有系统调用,并使用 POSIX 函数在标准 PC 上本地重现行为。
因此,当一个高优先级线程执行时,低优先级线程应该被挂起,无论它们当时正在做什么。低优先级线程的实现有责任确保它不会受到干扰。
我现在挂起一个线程通常是不安全的,这就解释了为什么我没有找到任何“suspend(pid)”函数。
我基本上想出了两个解决问题的方法:
-找到一种方法在高优先级线程启动时挂起低优先级线程(并在没有更多高优先级活动时恢复它们)
- 在我的低优先级代码中的任何地方定期调用一个非常小的“suspend_if_necessary”函数,并且每当必须启动高优先级时,等待所有低优先级进程调用该函数并被挂起,作为单个高优先级线程执行,然后恢复他们都。
即使它不是那么干净,我也很喜欢第二种解决方案,但仍然有一个问题:如何在不更改所有代码的情况下到处调用函数? 我想知道是否有一种简单的方法可以做到这一点,有点像调试代码:在执行的每一行添加一个钩子调用来检查一个标志并在该标志发生变化时运行一些特定的代码?
如果该问题有一个简单的解决方案,我会非常高兴,因为我确实需要代表目标执行流程的行为......
提前致谢,
咕噜。
【问题讨论】:
-
顺便说一句,高优先级线程只能由 3 个来源启动:低优先级线程启动、外部中断启动或睡眠后启动。所有这些来源都位于我的库中,因此我“知道”它并且可以立即向其他线程发送任何消息。
标签: c multithreading thread-safety pthreads