内核中的
来源:互联网 发布:linux 网络性能测试 编辑:程序博客网 时间:2024/06/01 07:15
访问共享资源的代码 区域称为临界区。自旋锁和互斥体是保护内核临界区的两种机制
自旋锁可以确保在同时只有一个线程进入临界区。其他进程想进入临界区的线程必须不停得原地打转,知道第一个线程释放自旋锁。这里说的线程不是内核线程,是执行的线程。
下面的例子演示了自旋锁的基本用法
#include<linux/spinlock.h>
spinlock_t mylock=SPIN_LOCK_UNLOCKED;
spin_lock(&mylock);
.........................................
spin_unlock(&mylock);
与自旋锁不同的是,互斥体进入一个被占用的临界区之前不会原地打转,而是使当前线程进入睡眠状态。如果要等待的时间较长,互斥体比自旋锁更适合,因为自旋锁会消耗CPU资源。在使用互斥体的场合,多于2次进程切换时间都可被认为是长时间,因此一个互斥体会引起本线程睡眠,而当期唤醒的时候,它需要被切换回来
因此,在很多情况下,决定使用自旋锁还是互斥体相对来说比较容易
(1)如果临界区需要睡眠,只能使用互斥体,因为在获得自旋锁后进行调度、抢占以及在等待队列上睡眠都是非法的。
(2)由于互斥体会面临竞争情况下将当前线程设置于睡眠状态,因此在中断处理函数中,只能使用自旋锁
#include<linux/mutex.h>
staticDEFINE_MUTEX(mymutex)
mutex_lock(&mymutex);
mutex_unlock(&mymutex);
互斥体接口代替了旧的信号量接口(semaphore)。互斥体接口是由-rt树演化而来。尽管如此,但是旧的信号量依然在内核和驱动程序中广泛使用,基本用法如下
#include<asm/semaphore.h>
static DECLARE_MUTEX(mysem);
down(&mysem);
....................................
up(&mysem);
- 内核中的
- Linux内核中的汇编语言
- Linux内核中的汇编语言
- Linux内核中的container_of()
- Linux内核中的红黑树
- Linux内核中的红黑树
- 内核中的stack
- 内核编程中的EXPORT_SYMBOL
- 内核编程中的EXPORT_SYMBOL
- 内核中的spin_lock
- 内核中的数据类型
- Linux内核中的红黑树
- Linux内核中的jiffies
- Linux内核中的jiffies
- Linux 内核中的红黑树
- Linux内核中的红黑树
- 内核中的同步问题
- Linux内核中的list_for_each_entry
- Hadoop DistributedCache使用方法及原理
- shell简单了解
- 机器学习-->无监督学习-->聚类
- mysql 查询优化01
- 旋转数组的最小数字
- 内核中的
- 深入理解Java之线程池
- 找个更换头像的地方都没有
- Java8学习(3)- Lambda 表达式
- NYOJ 1112 求次数(map容器)
- Play framework使用java代码自定义标签--FastTags
- 《javascript从入门到精通》第三篇 javascript高级应用
- 如何才能用C语言代码帅气地获取现在是今年的第几天呢?
- 挂载nfs磁盘