数据结构
pzc105
这个作者很懒,什么都没留下…
展开
-
自旋锁实现问题
不关抢占的自旋锁假设A线程获得锁后,此时存在B线程并且B线程优先级高,A线程被抢占挂起,B线程尝试访问相同的临界资源,B线程就可能会陷入活锁状态,不断尝试获得锁、失败、尝试获得锁、失败…不关中断的自旋锁假设CPU是单核的,进程获得了锁并访问临界资源,此时被中断,接着执行中断例程,单中断例程也范围相同的临界资源,此时进程就会陷入活锁状态无优先级自旋锁如果CPU处理器很多,就可能出现某些线程一直获取不到锁的情况FIFO的自旋锁排队自旋锁struct spin_lock{ uint32_t原创 2020-11-19 11:15:23 · 234 阅读 · 0 评论 -
一个无锁队列
在github上,发现一个非阻塞多消费者多生产者无锁队列,基于c++11实现,并且只有一个头文件,而这个头文件只有200多行代码。alignas、false sharing和true sharingalignas是c++11的一个关键字,用于内存字节对齐。false sharing,简单来说就是当两个成员变量在同一个cache line时,其中一个成员变量被修改,会导致cache line无效,另一个成员变量就没法享受cache带来的好处了。所以有时候要避免false sharing。true sh原创 2020-10-09 11:31:11 · 764 阅读 · 1 评论