Linux内核的并发
来源:互联网 发布:重庆网络监测公司 编辑:程序博客网 时间:2024/06/06 03:54
对于多线程来说,SMP和内核抢占是多线程执行的两种场景,多个线程能够同时共享内核数据结构,因此,这些数据结构的访问必须是串行的;
1.自旋锁和互斥体
自旋锁(spinlock)和互斥体(mutex)是保护内核临界区的两种机制。自旋锁可以保证在同一个时刻只有一个线程进入临界区,其他想进入临界区的线程只能原地打转,直到第一个线程释放掉自旋锁。
使用方法如下:
spinlock_t mylock = SPIN_LOCK_UNLOCKED;
spin_lock(&mylock);
/*.........临界区操作.........*/
spin_unlock(&mylock);
与自旋锁不同,互斥体在其他线程等待时处于睡眠状态,使用方法如下:
static DEFINE_MUTEX(mymutex);
mutex_lock(&mymutex);
/*.........临界区操作.........*/
mutex_unlock(&mymutex);
究竟什么时候用自旋锁什么时候采用互斥体呢?
1.如果临界区需要睡眠,只能使用互斥体;
2.中断处理中,只能使用自旋锁;
注:自旋锁既可以锁中断,也可以锁任务调度。
2.原子操作
原子操作用于执行轻量级的操作或者一次性操作,比如修改计数器,设置位等,原子操作可以确保操作的串行化,不再需要锁进行并发处理。原子操作的实现具体与体系结构有关。
3.读写锁
这也是一种并发保护的机制,如果每个执行单元在访问临界区的时候要么读要么写临界区,但是它们不会同时进行读和写操作,可以选择这种锁。
可以允许多个读线程进入临界区,但只要一个写线程进入临界区,其他的读和写都不允许进入。
- Linux内核的并发
- Linux内核产生并发的原因
- linux内核的并发与竞态
- Linux内核的并发与同步
- linux内核并发基本概念
- linux内核并发情景
- Linux内核并发机制
- Linux内核驱动并发控制
- Linux 内核中的并发--概念
- linux高并发应用对系统内核优化的要求
- 高并发网络负载linux的内核优化
- Linux高并发应用类型对系统内核的优化
- 并发基础 -- Linux 内核同步机制
- Linux内核开发之并发控制(一)
- Linux内核开发之并发控制(二)
- Linux内核开发之并发控制(三)
- Linux内核开发之并发控制(四)
- Linux内核开发之并发控制(五)
- DLL中创建窗口
- WPF Cursors
- 成都这几天天气太阴沉了
- u-boot-2011.03在TQ2440上的移植(6)--支持dm9000x网卡
- RepeatingImageButton
- Linux内核的并发
- Eclipse快捷键大全
- ORA-00600: internal error code, arguments: [13011], [9183], [12587093], [52], [12587093], [17], [], []
- FlexClient, MessageClient, and FlexSession objects介绍
- u-boot-2011.03在TQ2440上的移植(7)--机器码配对
- Postfix Installation From Source Code
- SM59配置RFC
- ASP入门(六):Cookies讲座
- HTTP协议通信过程