libcds

C++并发数据结构算法库
授权协议 BSL-1.0
开发语言 C/C++
所属分类 程序开发、 并发/并行处理框架
软件类型 开源软件
地区 不详
投 递 者 李烨烁
操作系统 Windows
开源组织
适用人群 未知
 软件概览

CDS是一个 C++ 模板库,包含 lock-free and fine-grained 算法。

包含一系列并发数据结构的实现:

  • 顺序支持的原子操作
  • SMR算法
  • 数据结构:
    • 队列: Michael & Scott lock-free 和 read/write lock-based, Moir et al algo, Ladan-Mozes & Shavit optimistic queue, bounded (ring-buffered) algos
    • 有序列表: Michael's algo, Lazy list algo
    • 图: Michael hash-map, Split-ordere list by Ori Shalev & Nir Shavit
  • 同步-lock with different back-off technique
  • new in 0.8.0 Michael's memory allocator. 参见 cds::memory::michael::Heap 

CDS大部分是 header-only,少数算法和数据结构在DLL(SO)库中,详情参见文档。

支持的编译平台有:

  • MS Visual Studio 2008 + for MS Windows x86 32/64bit
  • GCC 4.3 +
    • Linux: x86 (32bit), amd64 (64bit), IA64 Itanium (64bit)
    • Solaris: Sparc 64bit
    • HP-UX: IA64 64bit
    • new in 0.8.0 FreeBSD: x86 (32bit), amd64 (64bit)
 相关资料
  • leetcode/lintcode上的算法题 关于问题的答案和解体的思路,可以移步 : https://github.com/zhaozhengcoder/Algorithm About 这个仓库最初的想法是把lintcode/lintocde上面的算法题目整理一下,因为很多题目太多了显得太乱了,就不继续在GitHub上面写了,以前写的一部分移到我的博客上面了。 GitHub上面打算整理一些比较典

  • 数据结构是存储数据的编程方式,因此可以有效地使用数据。 几乎每个企业应用程序都以一种或另一种方式使用各种类型的数据结构。

  • KMP算法解决的问题是字符匹配,这个算法把字符匹配的时间复杂度缩小到O(m+n),而空间复杂度也只有O(m),n是target的长度,m是pattern的长度。 部分匹配表(Next数组):表的作用是 让算法无需多次匹配S中的任何字符。能够实现线性时间搜索的关键是 在不错过任何潜在匹配的情况下,我们”预搜索”这个模式串本身并将其译成一个包含所有可能失配的位置对应可以绕过最多无效字符的列表。 Nex

  • 二叉树 二叉树:二叉树是有限个结点的集合,这个集合或者是空集,或者是由一个根结点和两株互不相交的二叉树组成,其中一株叫根的做左子树,另一棵叫做根的右子树。 二叉树的性质: 性质1:在二叉树中第 i 层的结点数最多为2^(i-1)(i ≥ 1) 性质2:高度为k的二叉树其结点总数最多为2^k-1( k ≥ 1) 性质3:对任意的非空二叉树 T ,如果叶结点的个数为 n0,而其度为 2 的结点数为 n

  • 图是一种比线性表和树更复杂的数据结构,在图中,结点之间的关系是任意的,任意两个数据元素之间都可能相关。 图是一种 多对多 的数据结构。 Gravph(V, E) V - vertex:点 度 - 入度和出度 点与点之间:连通与否 E - edge: 边 有向边和无向(单线线) 权重(边长) 无向图(边没有方向) 有向图(边有方向) 图是由顶点和边组成的:(可以无边,但至少包含一个顶点) 一组顶点:

  • 与Set类似,ES6同样实现了一个Map类,即我们所说的字典 是一种以 键-值对 形式存储数据的数据结构 ,就如同我们平时查看通讯录一样,要找一个电话,首先先找到该号码的机主名字,名字找到了,紧接着电话号码也就有了。 这里的键就是你用来查找的东西,本例中指代的就是名字,值就是查找得到的结果,也就是对应的电话号码。 在JavaScript 中的 Object 类就是以字典的形式设计的,下面我们将会借

  • 在高中数学中第一课就是集合,一种数学概念。 通常用大写字母如A,B,S,T,...表示集合,而用小写字母如a,b,x,y,...表示集合的元素。若x是集合S的元素,则称x属于S,记为x∈S。若y不是集合S的元素,则称y不属于S,记为y∉S 。 在计算机中,集合(set)是一种包含不同元素的数据结构。 集合中的元素称为成员。 以 [value, value] 的形式储存元素 集合的两个最重要的特性是

  • 哈希表(Hash Table,也叫散列表),是根据关键码值 (Key-Value) 而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。哈希表的实现主要需要解决两个问题,哈希函数和冲突解决。 哈希函数 哈希函数也叫散列函数,它对不同的输出值得到一个固定长度的消息摘要。理想的哈希函数对于不同的输入应该产生不同的结构,同时散列结果应当具有同一性(输出值尽