内核的同步和互斥实例学习

| 2009年4月21日

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/mutex.h>
#include <linux/semaphore.h>
#include <linux/sched.h>

static DEFINE_MUTEX(mut1);
struct semaphore sem1,sem2;

int test1(void *p)
{
    down(&sem2);
    mutex_lock(&mut1);
    printk("get out test1\n");
    mutex_unlock(&mut1);
    up(&sem1);

    return 0;
}

int test2(void *p)
{
    down(&sem1);
    mutex_lock(&mut1);
    printk("get out test2\n");
    mutex_unlock(&mut1);
    up(&sem2);

    return 0;
}

static int __init mutex_init_test()
{
    init_MUTEX(&sem1);
    init_MUTEX_LOCKED(&sem2);

    printk("get out \n");
    kernel_thread(test1, test1, CLONE_KERNEL);
    kernel_thread(test2, test2, CLONE_KERNEL);

    return 0;
}

static void __exit mutex_exit_test()
{
    printk("get out \n");
    return;
}

module_init(mutex_init_test);
module_exit(mutex_exit_test);

MODULE_AUTHOR("Helight.Xu");
MODULE_LICENSE("Dual BDS/GPL");
看完本文有收获?请分享给更多人

关注「黑光技术」,关注大数据+微服务