【发布时间】:2014-02-24 10:19:10
【问题描述】:
考虑以下场景: 在 POSIX 系统中,来自用户程序的某些线程正在运行并且 timer_interrupt 已被禁用。
据我了解,除非它终止 - 当前运行的线程不会自愿放弃对 CPU 的控制。 我的问题如下:从线程内调用 pthread_yield() 是否会让内核控制 CPU?
对于这个问题的任何帮助将不胜感激。
【问题讨论】:
标签: pthreads kernel posix interrupt
考虑以下场景: 在 POSIX 系统中,来自用户程序的某些线程正在运行并且 timer_interrupt 已被禁用。
据我了解,除非它终止 - 当前运行的线程不会自愿放弃对 CPU 的控制。 我的问题如下:从线程内调用 pthread_yield() 是否会让内核控制 CPU?
对于这个问题的任何帮助将不胜感激。
【问题讨论】:
标签: pthreads kernel posix interrupt
关闭操作系统的定时器中断将把它变成一个协作多任务系统。这就是 Windows 1、2、3 和 Mac OS 9 的工作方式。只有当程序进行系统调用时,运行的任务才会发生变化。
由于 pthread_yield 导致系统调用,是的,内核将从程序中取回控制权。
如果您在协作式多任务系统上编写程序,那么非常重要不要占用 CPU。如果您的程序确实占用了 CPU,整个系统就会停止。
这就是 Windows MFC 在其消息循环中具有空闲消息的原因。执行长期任务的程序将在该消息处理程序中执行此操作,方法是操作一两个项目,然后返回操作系统以检查用户是否单击了某些内容。
【讨论】:
它可以通过发出执行阻塞线程间通信或请求 I/O 的系统调用轻松放弃控制。多线程操作系统不一定需要定时器中断,但它对于为此类系统调用提供超时以及在系统因就绪线程过载时提供帮助非常有用。
【讨论】: