我有一个问题,需要我使用高度并发,无等待的堆栈实现。我必须提前预先分配所有内存(没有垃圾收集或mallocs),并且堆栈的大小是可接受的(如果堆栈满,则push可能返回false)。
我熟悉Nir Shavit的堆栈实现:http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.156.8728 ......但这依赖于链表和垃圾收集。我需要一些基于数组的东西。
看起来ACM上有一个:http://dl.acm.org/citation.cfm?id=1532611虽然我对低下载率和引用持怀疑态度。
理想的答案是参考代码(在C / C ++中)我可以简单地窃取: - )
答案 0 :(得分:1)
你看过Windows DDI InterlockedPushEntrySList()和InterlockedPopEntrySList()吗?它们不是基于数组的,但它们是无锁的,并使用处理器原子指令来添加和删除堆栈中的项目。它不是免费等待,但它可能对你有用......