Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 是否存在任何基于数组、有界、无等待的堆栈?_Multithreading_Algorithm_Data Structures_Stack_Lockless - Fatal编程技术网

Multithreading 是否存在任何基于数组、有界、无等待的堆栈?

Multithreading 是否存在任何基于数组、有界、无等待的堆栈?,multithreading,algorithm,data-structures,stack,lockless,Multithreading,Algorithm,Data Structures,Stack,Lockless,我有一个问题,需要使用堆栈的高度并发、无等待的实现。我必须预先分配所有内存(无垃圾收集或mallocs),堆栈大小有界是可以接受的(如果堆栈已满,push可能返回false) 我熟悉Nir Shavit的堆栈实现:。。。但这依赖于链表和垃圾收集。我需要基于数组的东西 看起来ACM上有一个:尽管我对下载率和引用率低表示怀疑 理想的答案是参考代码(在C/C++中),我可以简单地窃取:-)您看过windows DDI InterlocatedPushEntrySlist()和InterlocatedP

我有一个问题,需要使用堆栈的高度并发、无等待的实现。我必须预先分配所有内存(无垃圾收集或mallocs),堆栈大小有界是可以接受的(如果堆栈已满,push可能返回false)

我熟悉Nir Shavit的堆栈实现:。。。但这依赖于链表和垃圾收集。我需要基于数组的东西

看起来ACM上有一个:尽管我对下载率和引用率低表示怀疑


理想的答案是参考代码(在C/C++中),我可以简单地窃取:-)

您看过windows DDI InterlocatedPushEntrySlist()和InterlocatedPopEntrySlist()了吗?它们不是基于数组的,但无锁,并使用处理器原子指令从堆栈中添加和删除项。它不是无等待功能,但可能对您有用…

您尝试过旋转锁吗?是的,它们不是无等待功能。调度程序可能会成为阻碍。我需要有保证的程序如果你运行多线程(线程比CPU多),你基本上永远不会空闲。顺便说一句:一旦调用方检测到堆栈已满的情况,它会做什么?Wildplasser:您确实可以对某些数据结构无等待,即使是在高并发状态下(这就是无锁编程的全部内容)。。。当堆栈已满时,调用者将返回与自旋锁同步的空闲列表。然而,满栈是一种罕见的情况。如果设计得当,(想想跳舞的链接),自旋锁等待不必超过10个周期。莱斯利·兰波特(Leslie Lamport)有一个针对一个生产者、多个消费者的算法。可能会适应。可能不是。嗨,大卫。这些我确实很熟悉。但我恐怕需要一些跨平台的东西。仅供参考,这些DDI是使用映射到特殊x86/x64指令的编译器内部函数实现的。它们可以移植到任何操作系统,并且可以在所有比奔腾4更新的英特尔处理器上工作。它们仍然不是无需等待,但在最终解决方案中可能会很有用。