linux内核锁机制实例代码-不可睡眠锁之自旋锁之二
2014-05-12 09:14
519 查看
spinlock.h
DEFINE_SPINLOCK
在kernel里面找到一个使用他的例子
获取锁
static inline void spin_lock(spinlock_t *lock)
{
raw_spin_lock(&lock->rlock);
}
static DEFINE_SPINLOCK(threads_lock);
struct our_data{
int count1;
int count2;
};
static struct our_data my_data;
#define MAX_KTHREAD 10
static struct task_struct *threads[MAX_KTHREAD];
static int thread_do(void *data)
{
printk("run ...\n");
while(!kthread_should_stop())
{
spin_lock(&threads_lock);
my_data.count1++;
my_data.count2 += 10;
spin_unlock(&threads_lock);
msleep(10);
}
return 0;
}
===============
如果我们不是编译时候初始化spinlock,而是运行时初始化他。
static spinlock_t threads_lock;
static void threads_lock_init(void)
{
//spin_lock_init
spin_lock_init(&threads_lock);
}
static __init int minit(void)
{
// printk("testpar= %#x.\n",testpar);
printk("call %s.\n",__FUNCTION__);
// other_function();
threads_lock_init();
if(create_threads())
{
cleanup_threads();
return -1;
}
return 0;
}
DEFINE_SPINLOCK
在kernel里面找到一个使用他的例子
获取锁
static inline void spin_lock(spinlock_t *lock)
{
raw_spin_lock(&lock->rlock);
}
static DEFINE_SPINLOCK(threads_lock);
struct our_data{
int count1;
int count2;
};
static struct our_data my_data;
#define MAX_KTHREAD 10
static struct task_struct *threads[MAX_KTHREAD];
static int thread_do(void *data)
{
printk("run ...\n");
while(!kthread_should_stop())
{
spin_lock(&threads_lock);
my_data.count1++;
my_data.count2 += 10;
spin_unlock(&threads_lock);
msleep(10);
}
return 0;
}
===============
如果我们不是编译时候初始化spinlock,而是运行时初始化他。
static spinlock_t threads_lock;
static void threads_lock_init(void)
{
//spin_lock_init
spin_lock_init(&threads_lock);
}
static __init int minit(void)
{
// printk("testpar= %#x.\n",testpar);
printk("call %s.\n",__FUNCTION__);
// other_function();
threads_lock_init();
if(create_threads())
{
cleanup_threads();
return -1;
}
return 0;
}
相关文章推荐
- linux内核锁机制实例代码-不可睡眠锁之自旋锁之二
- linux内核锁机制实例代码-不可睡眠锁之自旋锁之一
- Linux中与内核通信的Netlink机制(实例)
- linux新内核的时钟机制代码
- Linux中与内核通信的Netlink机制(实例)
- Linux中与内核通信的Netlink机制(实例)
- 简单谈一点linux内核中套接字的bind机制--2.6.30内核代码的改进
- Linux中与内核通信的Netlink机制(实例)
- Linux中与内核通信的Netlink机制(实例)
- 简单谈一点linux内核中套接字的bind机制--2.6.30内核代码的改进
- Linux中与内核通信的Netlink机制(实例)
- Linux中与内核通信的Netlink机制(实例)
- spinlock与linux内核调度的关系,那么为什么信号量保护的代码可以睡眠而自旋锁就不能呢?
- linux 驱动学习笔记02--应用实例:在内核中新增驱动代码目录和子目录
- Linux内核同步机制的自旋锁原理及综合应用实例
- Linux INotif机制详解及实例代码
- Linux中与内核通信的Netlink机制(实例)
- 实例分析Linux0.11内核中断机制
- linux新内核的时钟机制代码读后感
- linux新内核的时钟机制代码读后感