首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻塞/等待堆栈操作

阻塞/等待堆栈操作
EN

Stack Overflow用户
提问于 2011-12-28 23:26:32
回答 2查看 205关注 0票数 3

这是我在Oracle中遇到的一个面试问题。

存在堆栈,即使堆栈已满,推入操作也应该等待直到它完成,而弹出操作应该等待直到它完成,即使堆栈是空的。

我们如何才能做到这一点?

我的答案

让一个线程来做推送和弹出操作。推入线程必须等待,直到堆栈有空闲空间,而弹出线程必须等待,直到堆栈至少有一个元素。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-29 00:08:11

阻塞/等待堆栈操作可以通过让线程执行此任务来实现。

如果堆栈已满,则推入线程(执行推送操作的线程)进行阻塞推送操作。因此,它等待推送,直到堆栈有剩余的空间(直到发生弹出)。

如果堆栈为空,则弹出线程(执行弹出操作的线程)进行阻塞弹出操作。因此,它等待弹出,直到堆栈至少有一个元素(直到发生推送)。

票数 0
EN

Stack Overflow用户

发布于 2011-12-28 23:34:54

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8657737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档