|
|
1
2
你说得对。在C++中,函数的参数以任意顺序进行计算,但肯定地,编译器无法知道
考虑两个线程调用
|
|
|
2
1
两件事:(1)测试;集合只有一致数2;对于这样一个弱同步原语,只使用读/写内存屏障而不产生专门指令的开销就足够了(2) ABA问题是一个真正的问题,解决方案少得可怜;然而,对于CAS(32位系统上的cmpxchg8b和64位系统上的cmpxchg16b,用于x86/-64),寄存器的上部有足够的空间来存储如此大的时间戳,以至于ABA在实践中从未出现过(即使是在相当人为的设置中,也需要一个线程暂停几天或几周,然后在正确的时间点唤醒)正确的时刻)。 不过,我认为您正在尝试实现一个无锁队列(而不是列表)。队列比列表更容易实现。Edya Lazan Mozes和Nir Shavit的论文《无锁FIFO队列的一种乐观方法》和Maged M。迈克尔和迈克尔L。Scott对于无锁队列的实现既有丰富的信息,又易于实现。 但是,如果您坚持使用无锁链表,请考虑Michail Fomitchev和Eric Ruppert在“无锁链表和跳过列表”中的实现。您还可以查看Damian Dechev的无锁动态数组(Wikipedia上有一个链接)。 |
|
|
3
0
在两个版本的
和
您已经有一个错误,那就是在从假定的根节点读取之前,没有验证列表/堆栈是否为空。
pop的第一个版本必须是:
我敢肯定你会看到这一点,在混合中加入了更多的步骤。 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
MysteryMoose · GCC下故意忽略初始化器警告中的过量元素 1 年前 |
|
|
Ken P · 如何利用[*]printf格式类型规范警告? 2 年前 |
|
fghoussen · 在C结构体中,为什么打包、对齐似乎会进行填充? 2 年前 |
|
|
adversarr · 全局变量何时导出到可执行文件? 2 年前 |