现在的位置: 首页 > 综合 > 正文

内核线程学习笔记总结6

2017年12月22日 ⁄ 综合 ⁄ 共 680字 ⁄ 字号 评论关闭

static int kthread(void *_create)
{
    struct kthread_create_info *create = _create;
    int (*threadfn)(void *data);
    void *data;
    int ret = -EINTR;

    /* Copy data: it's on kthread's stack */
    threadfn = create->threadfn;
    data = create->data;

    /* OK, tell user we're spawned, wait for stop or wakeup */
    __set_current_state(TASK_UNINTERRUPTIBLE);
    complete(&create->started);
    schedule();

    if (!kthread_should_stop())
        ret = threadfn(data);

    /* It might have exited on its own, w/o kthread_stop.  Check. */
    if (kthread_should_stop()) {
        kthread_stop_info.err = ret;
        complete(&kthread_stop_info.done);
    }
    return 0;
这个就是kthead的故事。

 

看到了上面的这些,其实kernel确实也不容易,里面我忽略了很多东西。在其他时间,内核的同步机制,我再整一整。

 

内核的同步机制:原子操作,锁,信号亮,完成变量。

抱歉!评论已关闭.