同步机制
文章平均质量分 82
燕无鸻
这个作者很懒,什么都没留下…
展开
-
Linux 内核同步:互斥体(mutex)
互斥体互斥体是一种睡眠锁,他是一种简单的睡眠锁,其行为和 count 为 1 的信号量类似互斥体简洁高效,但是相比信号量,有更多的限制,因此对于互斥体的使用条件更加严格:任何时刻,只有一个指定的任务允许持有 mutex,也就是说,mutex 的计数永远是 1给 mutex 上锁这,必须负责给他解锁,也就是不允许在一个上下文中上锁,在另外一个上下文中解锁。这个限制注定了 mutex 无法承担内核和用户空间同步的复杂场景。常用的方式是在一个上下文中进行上锁/解锁。递归的调用上锁和解锁是不允许的。也就转载 2022-05-06 16:43:38 · 1401 阅读 · 0 评论 -
Linux 内核同步:信号量(semaphore)
信号量Linux Kernel 除了提供了自旋锁,还提供了睡眠锁,信号量就是一种睡眠锁。信号量的特点是,如果一个任务试图获取一个已经被占用的信号量,他会被推入等待队列,让其进入睡眠。此刻处理器重获自由,去执行其他的代码。当持有的信号量被释放,处于等待队列的任务将被唤醒,并获取到该信号量。从信号量的睡眠特性得出一些结论:由于竞争信号量的时候,未能拿到信号的进程会进入睡眠,所以信号量可以适用于长时间持有。而且信号量不适合短时间的持有,因为会导致睡眠的原因,维护队列,唤醒,等各种开销,在短时间的锁定某对转载 2022-05-06 16:33:49 · 1589 阅读 · 0 评论 -
Linux 内核同步 ---自旋锁(Spinlock)
内核抢占内核抢占的概念:如果进程正在执行内核函数时,即它在运行内核态,允许发生内核切换(被替换的进程是正在执行内核函数的进程),这个内核就是抢占的。抢占内核特点:一个内核态运行的进程,可能在执行内核函数期间被另外一个进程取代自旋锁内核当发生访问资源冲突的时候,可以有两种锁的解决方案选择:原地等待挂起当前进程,调度其他进程执行Spinlock 是内核中提供的一种比较常见的锁机制,自旋锁是“原地等待”的方式解决资源冲突的,即,一个线程获取了一个自旋锁后,另外一个线程期望获取该自旋锁,获取不到,只原创 2022-05-06 16:14:02 · 3993 阅读 · 0 评论