【问题标题】:Understanding mutal exclusion lock了解互斥锁
【发布时间】:2015-09-26 02:55:20
【问题描述】:

我正在阅读有关 ReadWriteLock 的文档

读写锁是否会提高使用性能 互斥锁取决于数据的频率 读取与被修改相比,读取和写入的持续时间 操作,以及对数据的争用——即, 将尝试同时读取或写入数据的线程。

“互斥锁”是什么意思?这是否意味着我们一次只能执行一项操作(读取或写入)?例如,只是一个同步块。

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    互斥锁将确保一次只能执行一个操作(一个读取器或一个写入器)。

    根据ReadWriteLock的javadoc:

    只要没有写者,读锁可能被多个读线程同时持有。写锁是独占的。

    在实践中,这意味着如果您有大量写入者,那么读取器就很难获得访问权限,因为单个写入器会锁定所有读取器。或者,如果您有许多读取器执行短读取,那么 ReadWriteLock 的开销将比简单的互斥锁执行得更差,因为 ReadWriteLock 的开销要大得多。

    我已经解释了 javadoc 的这一部分:

    例如,最初填充了数据并随后不经常修改但经常被搜索(例如某种目录)的集合是使用读写锁的理想候选者。但是,如果更新变得频繁,则数据大部分时间都被排他锁定,并发性几乎没有增加。此外,如果读取操作太短,则读写锁实现的开销(本质上比互斥锁更复杂)会主导执行成本,特别是许多读写锁实现仍然通过一小段代码序列化所有线程

    【讨论】:

    • 只是为了确保,当我只需要存储和读取 ArrayList 时,我不应该考虑使用 ReadWriteLock?
    猜你喜欢
    • 2018-05-23
    • 2022-07-31
    • 2010-11-22
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 2021-12-23
    • 2019-01-15
    相关资源
    最近更新 更多