gpt4 book ai didi

multithreading - 读取对象时是否需要锁定对象?

转载 作者:行者123 更新时间:2023-12-03 10:41:29 25 4
gpt4 key购买 nike

我正在编写一个程序,其中有一个由多个线程共享的对象:

  • A)多个写线程写入对象(都运行相同的
    功能)
  • B) 每 5 秒访问一次对象的读取线程
  • C) 访问对象的读取线程存在用户请求

  • 显然有必要在写入对象时锁定该对象,因为我们不希望多个线程同时写入该对象。

    我的问题是:
  • 从对象读取时是否也需要锁定对象?
  • 我认为如果我们在写入时只锁定对象,临界区就足够了,我的想法是否正确?但是如果我们在读取或写入时锁定对象,则需要互斥锁吗?

  • 我问这个问题是因为在 Microsoft Office 中,两个 Word 实例无法以读/写访问模式访问文档;但是,在以读/写模式打开文档时,可以打开另一个 Word 实例以只读模式访问该文档。相同的逻辑是否适用于线程?

    最佳答案

    正如 Ofir 已经写的那样 - 如果您尝试从某个其他线程正在修改的对象中读取数据 - 您可能会以某种不一致的状态获取数据。

    但是 - 如果您确定对象没有被修改,您当然可以从多个线程读取它。一般来说,你问的问题或多或少是读者-作者问题 - 见 http://en.wikipedia.org/wiki/Readers-writers_problem

    最后 - 临界区是一个抽象术语,可以使用互斥锁或监视器来实现。 Java 或 C# 中临界区的语法糖(同步、锁定)在幕后使用监视器。

    关于multithreading - 读取对象时是否需要锁定对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2171681/

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