Linux内核锁机制

您所在的位置:网站首页 多线程锁有几种有什么区别 Linux内核锁机制

Linux内核锁机制

2024-06-12 17:08| 来源: 网络整理| 查看: 265

阅读目录

一、信号量(struct semaphore): 二、互斥锁:(mutex_lock) 三、自旋锁(spin_lock): 四、原子操作: 4.1、Linux原子概念: 4.2、Linux内核两组原子操作接口

参考资料

90分钟搞懂线程锁、进程锁以及分布式锁 还有人弄不懂线程锁、进程锁和分布式锁? 聊点通俗的自旋锁,互斥锁,原子操作,CAS

正文

linux内核中有多种内核锁,内核锁的作用是:

多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是可以访问所有内核数据的,因此要对共享数据进行保护,即互斥处理;

linux内核锁机制有信号量、互斥锁、自旋锁还有原子操作。

一、信号量(struct semaphore):

是用来解决进程/线程之间的同步和互斥问题的一种通信机制,是用来保证两个或多个关键代码不被并发调用。

信号量(Saphore)由一个值和一个指针组成,指针指向等待该信号量的进程。信号量的值表示相应资源的使用情况。信号量S>=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个资源,因此S的值减1;当S 10 atomic_inc(&scull_available); 11 return -EBUSY; 12 } 13 return 0; // success 14 } 15 16 int scull_release(struct inode *inode, struct file *filp) 17 { 18 atomic_inc(&scull_available); 19 return 0; 20 }

复制代码

以上总结几点:

互斥锁与信号量的区别:

1、信号量一般以同步的方式对共享资源进行控制,而互斥锁通过互斥的方式对共享资源对其进行控制;

2、信号量可以对进程的共享资源进行控制,而互斥锁不行;

3、信号量的值为非负整数,而互斥锁的值只能为0或1;

4、互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到;mutex和二值信号量的区别在于mutex必须是同一个进程来释放

自旋锁与互斥锁的区别:

1、因为自旋锁不会引起调用者睡眠,所以效率比较高

2、自旋锁比较适用于锁使用者保持锁时间比较短的情况。

3、自旋锁容易造成死锁,所以需要安全使用它;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3