首页 > 解决方案 > (概念)当线程在执行期间更改程序参数时使用哪种技术/模式?(多线程)

问题描述

我需要改变一个程序:

但是,当 X、Y 和 Z 正在处理数据时,A 不能更改这些参数,否则数据将被损坏。更改应仅对下一批有效。

我的脑海里闪过很多想法:

-1。当 A 收到更改时,它会在完成最新批次后停止 XYZ。然后它会更改全局参数并允许 XYZ 恢复。

-2。XYZ 保留全局参数的本地副本,并在每次完成批处理时更新它,从而接受任何更改。当 A 更改参数时,XYZ 必须等待才能访问它们。(我相信这种技术称为互斥锁)。

在考虑它的同时,我想到这一定是一个相当普遍的情况,并且对此的解决方案必须已经存在。是否有解决此问题的模式(可能是 1 或 2 个已确定的名称)?如果不是,您如何看待提案 1 和提案 2?一个互斥体看起来足以满足 2,但如何实现 1 呢?

标签: multithreadingmutexcondition-variableconceptual

解决方案


线程 A 维护一个指向不可变参数对象的 volatile/atomic 指针。

X/Y/Z 在处理批处理之前获取自己的此指针副本,并使用参数对象。

当 A 获得参数更改时,它会创建一个全新的参数对象并更新指向它的指针。

如果您正在使用带有垃圾收集的语言,那么您只需要担心这些。如果您使用的是 C++,那么您可以使用它std::shared_ptr来管理参数对象的生命周期。


推荐阅读