小型Linux应用程序生成SCHED_FIFO线程并休眠。长按键锁定系统

时间:2011-08-24 16:50:11

标签: linux kernel scheduling rt

在多核系统(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。

任何指针?

0 个答案:

没有答案