Skip to content

Latest commit

 

History

History
26 lines (22 loc) · 1.17 KB

File metadata and controls

26 lines (22 loc) · 1.17 KB

简介

运用原子操作和内存序实现无锁并发链栈。

结构

文件 说明
Stack.hpp 定义无锁并发链栈类模板Stack。
test.cpp 测试代码。

功能

无锁并发链栈只实现入栈和出栈操作。

  • 入栈相对于出栈更简单,不涉及释放节点,采用原子性的比较和交换操作,即可保证线程安全。
  • 出栈需要控制节点的释放时机,多线程并发访问无锁链栈,会遇到同时访问相同节点的情况。
    为保证安全地释放节点,每个链栈节点设有内部和外部两个引用计数器,二者一正一负,分别记载访问开始和访问结束的线程数。
    当最后的线程访问结束,内部和外部引用计数器之和为零,此时就可以安全地释放节点。

测试

先创建栈对象和10个线程,各线程入栈和出栈100个元素,序列化出栈元素并且输出至文件。
再读取文件的元素至数组,对数组排序并且检查元素的正确性。

作者

name:许聪
mailbox:solifree@qq.com
CSDN:https://blog.csdn.net/xucongyoushan
gitee:https://gitee.com/solifree
github:https://github.com/SolifreeXu