Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 实用设计模式_C++_Multithreading_Design Patterns - Fatal编程技术网

C++ 实用设计模式

C++ 实用设计模式,c++,multithreading,design-patterns,C++,Multithreading,Design Patterns,我正在撕毁一个设计拙劣的子系统,这个子系统经历了两代人的微小变化,现在已经变成了一个血淋淋的烂摊子。我遇到的一个有趣的问题是程序如何将整个程序选项传递到它启动的两个线程中:它将程序选项复制到每个线程选项中,并将每个线程选项传递到线程中。这看起来很愚蠢,因为程序选项已经存储在全局对象中 我可能应该指出,在处理命令行和配置文件之后,这些选项是只读的,远远早于操作任何线程。更改配置文件或命令选项需要重新启动程序 我知道做这件事的程序员当时正在阅读设计模式,并得到了减少未声明依赖性的咒语,但从全局复制选

我正在撕毁一个设计拙劣的子系统,这个子系统经历了两代人的微小变化,现在已经变成了一个血淋淋的烂摊子。我遇到的一个有趣的问题是程序如何将整个程序选项传递到它启动的两个线程中:它将程序选项复制到每个线程选项中,并将每个线程选项传递到线程中。这看起来很愚蠢,因为程序选项已经存储在全局对象中

我可能应该指出,在处理命令行和配置文件之后,这些选项是只读的,远远早于操作任何线程。更改配置文件或命令选项需要重新启动程序

我知道做这件事的程序员当时正在阅读设计模式,并得到了减少未声明依赖性的咒语,但从全局复制选项似乎是在浪费时间和空间


那么,建议用什么方法来存储整个程序选项,使线程可以访问它们而无需复制它们呢

您可以只存储选项,因为它们确保其生存期足够,例如,在堆上,并将指向该对象的指针作为参数传递给线程


另一方面,通常命令行选项的大小可以忽略不计,通过不复制它们,您实际上不会优化任何东西,这也是我的看法。按照设计的工作方式,可以在程序运行时修改设置,但这是在执行主线程的上下文中发生的,任何时候选项更改,两个线程都将无效,因此简单的方法是停止运行的线程并启动新线程,传递更新的选项。