记录字节算法实习岗面试的一道算法题 发表于 2020-03-03 | 分类于 LeetCode | 问题描述以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix ... 阅读全文 »
内存一致性模型 发表于 2020-02-17 | 分类于 多线程 | 内存一致性模型(memory consistency model)是用来描述多线程对共享存储器的访问行为,在不同的内存一致性模型里,多线程对共享存储器的访问行为有非常大的差别。这些差别会严重影响程序的执行逻辑,甚至会造成软件逻辑问题。在后面的介绍中,我们将分析不同的一致性模型里,多线程的内存访问乱序 ... 阅读全文 »
同步关系 发表于 2020-02-16 | 分类于 多线程 | 翻译自:https://preshing.com/20130823/the-synchronizes-with-relation/ 略有修改 同步关系“ 与…同步 ”(Synchronizes-with)是语言设计者发明的一个术语,用于描述确保原子操作(甚至是非原子操作)的内存效果对其他线程可见 ... 阅读全文 »
你可以做任何类型的原子RMW操作 发表于 2020-02-16 | 分类于 多线程 | 翻译自:https://preshing.com/20150402/you-can-do-any-kind-of-atomic-read-modify-write-operation/ 略有删改 原子读取-修改-写入操作(或称为“ RMW”)比原子加载和存储更为复杂。它们使您可以从共享内存中的变 ... 阅读全文 »
原子操作和非原子操作 发表于 2020-02-16 | 分类于 多线程 | 翻译自:https://preshing.com/20130618/atomic-vs-non-atomic-operations/ 略有删改 关于Web上原子操作的知识已经很多,通常集中在原子读-修改-写(RMW)操作上。但是,这些并不是原子操作的唯一种类。还有原子加载和存储,它们同样重要。在 ... 阅读全文 »
acquire和release语意 发表于 2020-02-16 | 分类于 多线程 | 翻译自:https://preshing.com/20120913/acquire-and-release-semantics/ 略有删改 一般而言,在无锁编程中,线程可以通过两种方式操纵共享内存: 相互竞争资源 将信息从一个线程传递到另一个线程。 获取和释放语义对于后者至关重要:在线程之间 ... 阅读全文 »
获取和释放屏障 发表于 2020-02-16 | 分类于 多线程 | 翻译自:https://preshing.com/20130922/acquire-and-release-fences/ 我认为,获取(acquire fence, afence)和释放屏障(release fence, rfence)目前在网络上还是被误解了。太糟糕了,因为C ++ 11标准 ... 阅读全文 »
内存屏障就像源码控制操作一样 发表于 2020-02-16 | 分类于 多线程 | 翻译自:https://preshing.com/20120710/memory-barriers-are-like-source-control-operations/ 略有修改 如果使用源代码控制,那么您将逐渐理解内存顺序,这是使用C,C ++和其他语言编写无锁代码时的重要考虑因素。[PS: ... 阅读全文 »
多线程之内存屏障 发表于 2020-02-15 | 分类于 多线程 | 什么是内存屏障(Memory Barrier)内存屏障是一个CPU指令。它是这样一条指令: 确保一些特定操作执行的顺序; 影响一些数据的可见性(可能是某些指令执行后的结果)。 CPU核内部包含了多个执行单元。例如,现代Intel CPU包含了6个执行单元,可以组合进行算术运算,逻辑条件判断及内 ... 阅读全文 »
C++11线程库使用 发表于 2020-02-15 | 分类于 C++ | 从C++11开始,在STL中提供了thread模块对操作系统的C线程库进行了封装,避免了跨平台问题。但是,很多人觉得这个库封装的不够好。 线程同步互斥量C++11中提供了如下4种语义的互斥量(mutex): std::mutex:独占的互斥量,不能递归使用。 std::timed_mutex:带超 ... 阅读全文 »