gpt4 book ai didi

Java Mutex 与条件变量的关联

转载 作者:行者123 更新时间:2023-11-30 05:32:25 25 4
gpt4 key购买 nike

Java 中的每个条件变量 (wait() notify()) 都与单个互斥量(同步)相关联。

有人说(在 Java 中),每个互斥量也与一个条件变量相关联,这是一个比 pthreads 的条件变量和互斥量效率低的实现。但是我无法理解这个。这意味着什么?在这方面,Java 与 C/C++ pthreads 有何不同?

最佳答案

无法将多个条件变量与单个互斥量相关联是一种限制。例如,假设您要实现一个多生产者、多消费者阻塞队列(例如,java.util.concurrent.ArrayBlockingQueue)。

必须只有一个互斥量:生产者有一个互斥量而消费者有一个不同的互斥量是行不通的。但是使用 Java 的 synchronized 机制,这意味着也只能有一个条件变量。这意味着,使队列变为“未满”的消费者必须发出与使队列变为“非空”的生产者发出的信号相同的条件。 that 意味着,生产者和消费者必须 notifyAll(),否则无法保证被生产者唤醒的线程不会是另一个生产者或, 一个消费者唤醒的线程不会是另一个消费者。

在基于 pthreads 的实现中,队列可以有一个互斥锁和一个供生产者等待的条件变量,以及一个供消费者等待的不同条件变量。


幸运的是,Java 标准库提供了另一种锁定方式:java.util.concurrent.locks.Lock 接口(interface)定义了一个互斥体,它可以给出任意数量的关联Condition 对象。

关于Java Mutex 与条件变量的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35116776/

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