我在多线程和共享资源同步方面遇到了鸡或蛋的问题,目前迷路了,我请求你的帮助。这是条件。
[条件一]
- 有在进程内共享的共享资源。
- 共享资源由管理器类管理。
- 管理器类具有用于管理资源的线程安全函数。(例如添加/删除/获取)
- 线程安全是通过锁定对第一个线程进入的共享资源的访问来实现的。
- 每当每个线程需要共享资源时,它都会通过调用管理器类的函数来获取资源。(瓶颈问题)
为了解决这个问题,我想到了事先从经理那里按数组获取所有当前资源。
[条件2]
- 线程(主)在其他线程开始之前访问所有管理器并获取所有资源。
- 每个其他线程处理“给定资源”。(线程的每个“给定资源”不在线程之间共享)
- 现在,瓶颈问题消失了。(从技术上讲,瓶颈并没有消失,只是操作阶段被“划分”了)但是,出现了2个问题。
- 管理器中的线程安全指令变成了无用的开销。
- 每个线程中的所有条件检查在技术上都变得毫无用处。
问题2详细
- 线程 A 处理“给定资源”的空值,它不是空值。
- 如果线程 B 调用并从管理器中删除给定的资源,
- 线程 A 继续处理非空资源,实际上是空的,这是严重错误。
在这一点上,我想到了重要的事情是什么时候同步。
此外,上述问题 2 已经在条件 1 中打开,因为此时给定的资源是有效的,但在那之后,就不能保证资源的有效性。
我的问题是,你如何处理这个问题?
到目前为止,我的结论是“重要的是何时同步”。
但这意味着需要固定多线程处理时间。然后,所有这些锁或原子都是不必要的。