您的位置:首页 > 其它

信号量实现内核线程同步例子

2012-05-23 17:20 239 查看
#include <linux/init.h>

#include <linux/module.h>

#include <linux/sched.h>

#include <asm-i386/semaphore.h>

MODULE_LICENSE("GPL");

int num[2][5] =

{

{0, 2, 4, 6, 8},

{1, 3, 5, 7, 9}

};

struct semaphore sem_first;

struct semaphore sem_second;

int thread_print_first(void *);

int thread_print_second(void *);

int thread_print_first(void *p)

{

int i;

int *num = (int *)p;

for(i = 0; i < 5; i++)

{

down(&sem_first);

printk("Hello World : %d\n", num[i]);

up(&sem_second);

}

return 0;

}

int thread_print_second(void *p)

{

int i;

int *num = (int *)p;

for(i = 0; i < 5; i++)

{

down(&sem_second);

printk("Hello World : %d\n", num[i]);

up(&sem_first);

}

return 0;

}

static int hello_init(void)

{

printk(KERN_ALERT"Hello World enter\n");

init_MUTEX(&sem_first);

init_MUTEX_LOCKED(&sem_second);

kernel_thread(thread_print_first,num[0],CLONE_KERNEL);

kernel_thread(thread_print_second,num[1],CLONE_KERNEL);

return 0;

}

static void hello_exit(void)

{

printk(KERN_ALERT"hello world exit\n");

}

module_init(hello_init);

module_exit(hello_exit);

MODULE_AUTHOR("Niu Tao");

MODULE_DESCRIPTION("A simple hello world Module");

MODULE_ALIAS("a simplest module");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: