0

我在多线程和共享资源同步方面遇到了鸡或蛋的问题,目前迷路了,我请求你的帮助。这是条件。

[条件一]

  • 有在进程内共享的共享资源。
  • 共享资源由管理器类管理。
  • 管理器类具有用于管理资源的线程安全函数。(例如添加/删除/获取)
  • 线程安全是通过锁定对第一个线程进入的共享资源的访问来实现的。
  • 每当每个线程需要共享资源时,它都会通过调用管理器类的函数来获取资源。(瓶颈问题)

为了解决这个问题,我想到了事先从经理那里按数组获取所有当前资源。

[条件2]

  • 线程(主)在其他线程开始之前访问所有管理器并获取所有资源。
  • 每个其他线程处理“给定资源”。(线程的每个“给定资源”不在线程之间共享)
  • 现在,瓶颈问题消失了。(从技术上讲,瓶颈并没有消失,只是操作阶段被“划分”了)但是,出现了2个问题。
  1. 管理器中的线程安全指令变成了无用的开销。
  2. 每个线程中的所有条件检查在技术上都变得毫无用处。

问题2详细

  • 线程 A 处理“给定资源”的空值,它不是空值。
  • 如果线程 B 调用并从管理器中删除给定的资源,
  • 线程 A 继续处理非空资源,实际上是空的,这是严重错误。

在这一点上,我想到了重要的事情是什么时候同步。

此外,上述问题 2 已经在条件 1 中打开,因为此时给定的资源是有效的,但在那之后,就不能保证资源的有效性。

我的问题是,你如何处理这个问题?

到目前为止,我的结论是“重要的是何时同步”。

但这意味着需要固定多线程处理时间。然后,所有这些锁或原子都是不必要的。

4

0 回答 0