有界缓冲区,互斥与空的顺序。首先

shle2821

我对加涅(Gagne)的《操作系统概念》(Operating Systems Concepts)一书中的有界缓冲区问题中的信号量(muxtex,空)的排序有疑问。以下是我所引用的代码的两个图像。

首先)有界缓冲区。

第二)插入方法。

我的问题是:在insert方法中的mutex.acquire()之前具有empty.acquire()的原因是什么?还不是更清楚的是,mutex.acquire()是否在empty.acquire之前?我知道就功能而言,顺序并不重要。但是作者为什么在mutex.acquire之前调用empty.acquire是有原因的?

在此处输入图片说明

在此处输入图片说明

查克·巴特森(Chuck Batson)

该顺序对于缓冲区已满的情况很重要。empty.acquire()在尝试向缓冲区中添加一项之前,具有阻塞线程的作用,直到缓冲区中至少有一个空闲插槽为止。

如果反转,该函数将如下所示:

public void insert(Object item) {
    mutex.acquire();
    empty.acquire();
    ...

如果在缓冲区已满时调用此方法,mutex则将在线程被阻塞时获取empty.acquire()然后,如果另一个线程调用remove()释放缓冲区插槽,它将阻塞on mutex.acquire()现在,不能添加任何新元素,因为缓冲区已满,并且所有删除​​对象的尝试都将阻塞。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Erlang有界缓冲区测试程序

来自分类Dev

如何实现有界缓冲区的同步检查以避免竞争条件?

来自分类Dev

无锁有界MPMC环形缓冲区故障

来自分类Dev

使用Java库信号量的有界缓冲区

来自分类Dev

为什么我得到不同的输出?我正在使用有界缓冲区、pthreads 和信号量使用 C++ 进行编码

来自分类Dev

C中的缓冲区互斥量和条件变量

来自分类Dev

有界图元

来自分类Dev

Flatbuffer缓冲区始终为空

来自分类Dev

C:UART,ISR,循环FIFO缓冲区:有时以错误的顺序发送字节

来自分类Dev

perl gunzip的缓冲区和gunzip的文件具有不同的字节顺序

来自分类Dev

带有协议缓冲区的RPC

来自分类Dev

具有Qt的C ++缓冲区

来自分类Dev

带有CMakeLists的协议缓冲区

来自分类Dev

从空缓冲区构造`std :: ostream`是否有效?

来自分类Dev

从带有缓冲区的网络输入流中读取的Java(需要排除空符号)

来自分类Dev

有界累计总和?

来自分类Dev

有界子集和

来自分类Dev

返回有界通配符

来自分类Dev

高效的通用缓冲区队列,可进行顺序处理

来自分类Dev

Boost.Asio-具有自定义缓冲区的多个缓冲区

来自分类Dev

具有多个绘制缓冲区的帧缓冲区

来自分类Dev

解码图片缓冲区和编码图片缓冲区之间有区别吗?

来自分类Dev

缓存,存储缓冲区和BIU / WCB在CPU中是否对每个物理缓冲区都有单独的物理缓冲区,或者对所有缓冲区都有单独的物理缓冲区?

来自分类Dev

处理原型缓冲区中的空值

来自分类Dev

如何检查缓冲区是否为空?

来自分类Dev

vim中的switchbuf导致空缓冲区

来自分类Dev

检查stdin缓冲区是否为空

来自分类Dev

node.js缓冲区不为空

来自分类Dev

从QTcpSocket读取时为空缓冲区

Related 相关文章

热门标签

归档