gpt4 book ai didi

c++ - 阻塞/等待堆栈操作

转载 作者:太空狗 更新时间:2023-10-29 23:08:40 31 4
gpt4 key购买 nike

这是我在 Oracle 的面试问题。

有一个堆栈,即使堆栈已满,push 操作也应该等到它完成,即使堆栈为空,pop 操作也应该等到它完成。

我们怎样才能做到这一点?

我的回答

让一个线程做push & pop操作。入栈线程必须等到栈有空位,出栈线程必须等到栈至少有一个元素。

最佳答案

两个信号量?使用堆栈深度限制加载一个“A”,创建另一个“B”为空。每个想要推送一个值的线程都必须等待来自“A”的单元,弹出该值,然后向“B”发送一个单元信号。每个想要弹出的线程都必须等待来自“B”的单元,弹出值,然后向“A”发送一个单元信号。

如果堆栈不是线程安全的,您还需要一个互斥锁/临界区来保护堆栈免受多次访问。

关于c++ - 阻塞/等待堆栈操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8657737/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com