(概念性)当线程在执行过程中改变程序参数时使用哪种技术/模式?(多线程)



我需要修改一个程序:

  • i/o线程A,从流接收数据,

  • 根据a获取和设置的全局参数进行批处理的工作线程X, Y和Z。

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

我的脑海里闪过一些想法:

1。当A接收到更改时,当最新批处理完成时,它有XYZ停止。然后它更改全局参数并允许XYZ继续。

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

在思考这个问题的时候,我突然想到这一定是一个相当普遍的情况,而且解决方案一定已经存在了。是否有一种模式可以解决这个问题(可能是1或2与已建立的名称)?如果不是,你如何看待提案1和提案2?一个互斥锁看起来足以容纳2,但是如何实现1呢?

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

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

当A的形参发生变化时,它创建一个全新的形参对象,并更新指向它的指针。

如果你使用的是带有垃圾回收的语言,那么这就是你所要担心的。如果你正在使用c++,那么你可以使用std::shared_ptr来管理参数对象的生命周期。

相关内容

  • 没有找到相关文章

最新更新