在多核系统(Ubuntu 11.04 x86-32)上运行下面的代码(使用-lpthread编译),它只是生成一个SCHED_FIFO线程并进入休眠状态,显示一些奇怪的行为。如果你按一个键就可以回复它。但是,如果您按住某个键,该过程将挂起,您将需要硬重启(软重启挂起,因为kill -9)。通过telnet会话做同样的事情就可以了。
#include <sched.h>
#include <pthread.h>
#include <assert.h>
void* schedtest_busy_wait_thread_entry(void *arg)
{
struct sched_param sp;
sp.__sched_priority = sched_get_priority_min(SCHED_FIFO);
assert(sched_setscheduler(0, SCHED_FIFO, &sp) == 0);
while (1);
return NULL;
}
int main(int argc, char **argv)
{
pthread_t thread_id;
assert(pthread_create(&thread_id, NULL, schedtest_busy_wait_thread_entry, NULL) == 0);
while (1) sleep(1);
return 0;
}
显然,这只是一个更大,更复杂的系统的摘录,需要一个繁忙的等待SCHED_FIFO线程(具有硬编码关联性)但显示相同的行为。 / proc / sys / kernel / sched_rt_runtime_us是默认值950000。
任何指针?