Linux
三丰SanFeng
资深架构师,10+年大厂(BAT)开发管理经验
展开
-
字节对齐
什么是对齐,以及为什么要对齐: 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因: 各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据原创 2015-09-12 19:21:55 · 399 阅读 · 0 评论 -
Linux Kernel CMPXCHG函数分析
最近看到Linux Kernel cmpxchg的代码,对实现很不理解。上网查了内嵌汇编以及Intel开发文档,才慢慢理解了,记录下来以享和我一样困惑的开发者。其实cmpxchg实现的原子操作原理早已被熟知:cmpxchg(void* ptr, int old, int new),如果ptr和old的值一样,则把new写到ptr内存,否则返回ptr的值,整个操作是原子的。在Intel平台下,会转载 2015-09-22 21:00:10 · 1165 阅读 · 0 评论 -
Linux同步机制 - 多线程开发总结
总结了多线程开发中的一些常见经验原创 2015-09-18 14:57:33 · 514 阅读 · 0 评论 -
无锁编程(四) - CAS与ABA问题
讲解了无锁编程中的CAS解法,原理及给出了一些实例。给出了ABA问题的描述和常见解决方案。原创 2015-09-22 20:55:00 · 1315 阅读 · 1 评论 -
无锁编程(六) - seqlock(顺序锁)
seqlock(顺序锁)用于能够区分读与写的场合,并且是读操作很多、写操作很少,写操作的优先权大于读操作。seqlock的实现思路是,用一个递增的整型数表示sequence。写操作进入临界区时,sequence++;退出临界区时,sequence再++。写操作还需要获得一个锁(比如mutex),这个锁仅用于写写互斥,以保证同一时间最多只有一个正在进行的写操作。当sequence为奇数时原创 2015-09-23 19:49:41 · 747 阅读 · 0 评论 -
无锁编程(五) - RCU(Read-Copy-Update)
RCU(Read-Copy Update)RCU就是指读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读操作不需要获得任何锁就可以访问,但写操作在访问它时首先拷贝一个副本,然后对副本进行修改,最后在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时机就是所有引用该数据的CPU都退出对共享数据的操作。Linux内核中内存管理大量的运用到了RCU机制。为每个内存原创 2015-09-23 19:21:07 · 4855 阅读 · 2 评论 -
无锁编程 - 大纲
介绍了锁的一些缺点,给出了无锁编程的一些思路,无锁编程主要涵盖的内容大纲和实战大纲。原创 2015-09-19 21:14:33 · 930 阅读 · 0 评论 -
Linux同步机制(一) - 线程锁
1 互斥锁在线程实际运行过程中,我们经常需要多个线程保持同步。这时可以用互斥锁来完成任务。互斥锁的使用过程中,主要有pthread_mutex_initpthread_mutex_destorypthread_mutex_lockpthread_mutex_unlock这几个函数以完成锁的初始化,锁的销毁,上锁和释放锁操作。1.1 锁的创建锁可以被动态或静态创建原创 2015-09-11 17:22:03 · 1503 阅读 · 0 评论 -
Linux同步机制(二) - 条件变量,信号量,文件锁,栅栏
Linux同步机制第二弹 - 讲解了条件变量,无名信号量,文件锁,栅栏的基本概念及使用原创 2015-09-17 16:31:21 · 1087 阅读 · 0 评论 -
无锁编程(二) - 原子操作
介绍了无锁编程之原子操作的概念,原理和原子操作的几种类型及使用方法,对原子操作和互斥锁的性能也进行一些对比原创 2015-09-22 14:34:53 · 3688 阅读 · 1 评论 -
无锁编程(三) - 忙等待
忙等待可以看作一种特殊的无锁编程,本文详细介绍了忙等待的概念,忙等待的分类,并给出使用方法和范例原创 2015-09-22 17:36:13 · 2072 阅读 · 0 评论 -
Linux同步机制 - 基本概念(死锁,活锁,饿死,优先级反转,护航现象)
讲解了Linux Pthread中的一些基本概念,包括,死锁,活锁,饿死,优先级反转,为后面研究锁机制和无锁编程打下基础原创 2015-09-18 10:56:37 · 2328 阅读 · 0 评论 -
无锁编程(一) - Double-checked Locking
Double-checked Locking,严格意义上来讲不属于无锁范畴,无论什么时候当临界区中的代码仅仅需要加锁一次,同时当其获取锁的时候必须是线程安全的,此时就可以利用 Double-checked Locking 模式来减少锁竞争和加锁载荷。目前Double-checkedLocking已经广泛应用于单例 (Singleton)模式中。 Double原创 2015-09-19 23:51:18 · 1074 阅读 · 0 评论 -
无锁编程(七) - 实战
数据与进程对等的处理 场景:某服务需要支持海量用户,在一台物理机器上运行了多个进程/线程。对于数据应该如何处理以保证安全快速的访问数据呢? 解决方案:“分” 分号段 分进程 分端口 分库分表 单一生产者与单一消费者 场景: 网络接入进程与逻辑处理进程通过共享内存通讯。我们要如何进行设计? 通常的实现:读写加锁 示例:无锁内存队列的实现 append_data(src原创 2015-09-23 21:15:31 · 806 阅读 · 0 评论