随笔分类 - 编程技术
摘要:CAS一般采用原子级的read-modify-write原语来实现Lock-Free算法,其中LL和SC是Lock-Free理论研究领域的理想原语,但实现这些原语需要CPU指令的支持,非常遗憾的是目前没有任何CPU直接实现了SC原语。根据此理论,业界在原子操作的基础上提出了著名的CAS(Compar...
阅读全文
摘要:概念忙等待可以认为是一种特殊的忙等待忙等待分类Peterson算法xchg解法TSL解法自旋锁Peterson算法Peterson算法是一个实现互斥锁的并发程序设计算法,可以控制两个线程访问一个共享的单用户资源而不发生访问冲突。GaryL. Peterson于1981年提出此算法。#include ...
阅读全文
摘要:什么是原子操作原子操作可以保证指令以原子的方式执行——执行过程不被打断,原子操作是多数无锁编程的基本前提。原子操作分为以下几类对1字节的读写对2字节数(对齐到16位边界)读写对4字节数(对齐到32位边界)读写对8字节数(对齐到64位边界)读写xchg原子操作基本原理在x86平台上,CPU提供了在指令...
阅读全文
摘要:Double-checked Locking,严格意义上来讲不属于无锁范畴,无论什么时候当临界区中的代码仅仅需要加锁一次,同时当其获取锁的时候必须是线程安全的,此时就可以利用 Double-checked Locking 模式来减少锁竞争和加锁载荷。目前Double-checkedLocking已经...
阅读全文
摘要:锁的缺点锁定被迫交出时间片。锁定意味着阻塞,多个线程(进程)排队获取资源,无法充分发挥系统性能。锁定的阻塞无法通过fd进行通知,对性能有进一步的影响(理想的服务器模型是全局一处阻塞统一等待消息)。一些锁限制了必须使用线程的方式进行开发,而线程无法充分利用系统的内存。pthread库在特殊情况下可能产...
阅读全文
摘要:1 对于CPU开销大的场景,能利用多核,就尽量利用多核(常常自以为某需求的运算量不大,且CPU足够快,就偷懒写个单线程,结果效率很低)2 使用多线程的时候,默认是加锁的。在加锁保证业务正常的条件下,再考虑优化互斥锁带来的性能损耗互斥锁 < 读写锁 < 自旋锁 < 无锁(原子操作)3 减少线程之间的相...
阅读全文
摘要:死锁(deadlock)是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具...
阅读全文
摘要:1 条件变量条件变量是一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足。1.1 相关函数#include pthread_cond_t cond = PTHREAD_COND_INITIALIZER;intpthread_cond_init(pthread_cond_t*cond,pth...
阅读全文
摘要:原文地址:https://www.jianshu.com/p/e8fcc01041a7 什么是对齐,以及为什么要对齐: 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照
阅读全文
摘要:一直对换行符这个东西概念比较模糊,直到最近花了一点时间仔细研究了一下,才彻底搞清楚这个问题,本文前面介绍部分是外文转载,后面例子是个人总结,希望能对大家有一些帮助。回车符号和换行符号产生背景关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。在计算机...
阅读全文
摘要:1 互斥锁在线程实际运行过程中,我们经常需要多个线程保持同步。这时可以用互斥锁来完成任务。互斥锁的使用过程中,主要有pthread_mutex_initpthread_mutex_destorypthread_mutex_lockpthread_mutex_unlock这几个函数以完成锁的初始化,锁...
阅读全文

浙公网安备 33010602011771号