我得到一个堆栈空异常。如果堆栈不为空(它有 16 个项目),这怎么可能?
我得到了错误的快照:

有人可以解释一下吗?
我得到一个堆栈空异常。如果堆栈不为空(它有 16 个项目),这怎么可能?
我得到了错误的快照:

有人可以解释一下吗?
使用类似Stack<T>. _ 最简单的方法是使用lock,然后您也可以将lock用于同步本身;所以流行会是:
int item;
lock (SharedMemory)
{
    while (SharedMemory.Count == 0)
    {
        Monitor.Wait(SharedMemory);
    }
    item = SharedMemory.Pop();
}
Console.WriteLine(item);
和推动将是:
lock (SharedMemory)
{
    SharedMemory.Push(item);
    Monitor.PulseAll(SharedMemory);
}
    堆栈怎么可能已满并且有 16 个项目??!
在多线程环境中这是很有可能的。
你在你的程序中使用了多个线程吗?如果是,SharedMemory则应在对其lock进行任何更改之前进行编辑。
如果SharedMemory是Stack, 并且因为您使用的是多线程并且如果您使用的是 .Net 4 。你应该使用:ConcurrentStack
编辑
在我的第一次编辑和Quartermeister的精彩评论之后,这是一个更简单的工作解决方案:
    int item;
    var SharedMemory = new BlockingCollection<int>(new ConcurrentStack<int>());
    // later in the Consume part
    item = SharedMemory.Take(); // this will block until there is an item in the list
    Console.WriteLine(item);