信号量实现内核线程同步例子
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");
#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");
相关文章推荐
- Linux平台用C++实现信号量,同步线程
- 线程同步之semaphore信号量,代码实现
- Linux 线程信号量,进程信号量和内核驱动程序信号量(线程同步信号量,进程同步信号量和设备驱动同步信号量)
- Linux平台用C++实现信号量,同步线程
- 使用信号量实现线程间同步
- 线程同步3 ------ 信号量实现进程或者线程之间的同步
- Windows编程--线程和内核对象的同步-信标(信号量)内核对象
- 同步事件,信号量,互斥,临界区,线程,线程池C++实现(win32,linux)
- Linux利用信号量实现线程的同步与互斥
- 用信号量实现 多个线程间的同步(sem)
- Linux平台用C++实现信号量,同步线程
- 用system V信号量实现进程同步的例子
- 线程间同步之信号量实现环形buf
- 线程间的同步----利用信号量来实现
- 信号量+临界区实现线程间的同步
- linux信号量实现线程读写同步
- QT之使用QSemaphore信号量同步线程小例子
- Linux内核同步机制之信号量与锁
- 多线程六 经典线程同步之信号量Semaphore
- java多线程有几种实现方法?线程之间如何同步