<![CDATA[蜗窝科技]]> http://jyj19.com/ zh-cn www.emlog.net RCU(2)- 使用方法 http://jyj19.com/kernel_synchronization/462.html 阅读全文>>]]> Fri, 24 May 2019 11:36:15 +0000 沙漠之狐 http://jyj19.com/kernel_synchronization/462.html RCU(1)- 概述 http://jyj19.com/kernel_synchronization/461.html 阅读全文>>]]> Fri, 24 May 2019 11:30:14 +0000 沙漠之狐 http://jyj19.com/kernel_synchronization/461.html Linux内核的自旋锁 http://jyj19.com/kernel_synchronization/460.html 自旋锁用于处理器之间的互斥,适合保护很短的临界区,并且不允许在临界区睡眠。申请自旋锁的时候,如果自旋锁被其他处理器占有,本处理器自旋等待(也称为忙等待)。

进程、软中断和硬中断都可以使用自旋锁。

自旋锁的实现经历了3个阶段:

(1)     最早的自旋锁是无序竞争的,不保证先申请的进程先获得锁。

(2)     2个阶段是入场券自旋锁,进程按照申请锁的顺序排队,先申请的进程先获得锁。

(3)     3个阶段是MCS自旋锁。入场券自旋锁存在性能问题:所有申请锁的处理器在同一个变量上自旋等待,缓存同步的开销大,不适合处理器很多的系统。MCS自旋锁的策略是为每个处理器创建一个变量副本,每个处理器在自己的本地变量上自旋等待,解决了性能问题。

阅读全文>>]]>
Fri, 17 May 2019 11:11:14 +0000 沙漠之狐 http://jyj19.com/kernel_synchronization/460.html
编译乱序(Compiler Reordering) http://jyj19.com/kernel_synchronization/453.html 编译乱序(Compiler Reordering)

棋牌游戏,欢乐谷手机棋牌下载送彩金 编译器(compiler)的工作就是优化我们的代码以提高性能。这包括在不改变程序行为的情况下重新排列指令。因为compiler不知道什么样的代码需要线程安全(thread-safe),所以compiler假设我们的代码都是单线程执行(single-threaded),并且进行指令重排优化并保证是单线程安全的。因此,当你不需要compiler重新排序指令的时候,你需要显式告诉compiler,我不需要重排。否则,它可不会听你的。本篇文章中,我们一起探究compiler关于指令重排的优化规则。

阅读全文>>]]>
Wed, 23 Jan 2019 14:59:19 +0000 smcdef http://jyj19.com/kernel_synchronization/453.html
Linux中常见同步机制设计原理 http://jyj19.com/kernel_synchronization/445.html 引言 今天谈谈linux中常见并发访问的保护机制设计原理。为什么要写这篇文章呢?其实想帮助自己及读者更深入的了解背后的原理(据可靠消息,锁的实现经常出现在笔试环节。既可以考察面试者对锁的原理的理解,又可以考察面试者编程技能)。我们抛开linux中汇编代码。用C语言为大家呈现背后实现的原理。同时,文章中的代码都没有考虑并发情况(例如某些操作需要原子性,或者数据需要保护等)。 阅读全文>>]]> Sat, 09 Jun 2018 08:19:03 +0000 smcdef http://jyj19.com/kernel_synchronization/445.html