fis*_*h47 5 c++ linux embedded pthreads
最近我开始将 ucos-ii 移植到 Ubuntu PC。
我们知道,在 pthread 的回调函数中,通过简单地在“while”循环中添加一个标志来执行暂停和恢复(如下面的解决方案)是不可能模拟 ucos-ii 中的“进程”的。因为ucos-ii中的“进程”可以随时暂停或恢复!
我在下面的网站上找到了一种解决方案,但无法构建,因为它已过时。它使用Linux中的进程来模拟ucos-ii中的任务(就像我们Linux中的进程)。
http://www2.hs-esslingen.de/~zimmerma/software/index_uk.html
如果pthread可以像进程那样随时暂停和恢复,请告诉我一些相关的功能,我自己能弄明白。如果不能,我想我应该专注于较旧的解决方案。非常感谢。
如果使用条件变量在特定点停止还不够,则无法使用 pthread 来执行此操作。pthread 接口不包括挂起/恢复功能。
例如,参见此处的答案 E.4 :
POSIX 标准没有提供线程 A 可以在没有 B 配合的情况下挂起另一个线程 B 执行的机制。实现挂起/重新启动机制的唯一方法是让 B 定期检查某个全局变量的挂起请求,然后在条件变量上挂起自身,另一个线程稍后可以发出信号以重新启动 B.
该常见问题解答继续描述了几种非标准的方法,一种在 Solaris 中,一种在 LinuxThreads 中(现在已过时;不要将其与 Linux 上当前的线程混淆);这些都不适用于您的情况。
小智 5
Modula-3 垃圾收集器需要在任意时间挂起 pthread,而不仅仅是在它们等待条件变量或互斥锁时挂起。它通过注册一个(Unix)信号处理程序来挂起线程,然后使用 pthread_kill 向目标线程发送信号。我认为它有效(它对其他人来说是可靠的,但我现在正在调试它的问题......)虽然它有点笨拙......
谷歌搜索 ThreadPThread.m3 并查看例程“StopWorld”和“StartWorld”。处理程序本身在 ThreadPThreadC.c 中。
| 归档时间: |
|
| 查看次数: |
11218 次 |
| 最近记录: |