几个单身汉:每个任务一个
Several singletons: one for each task
我有一个C++多线程应用程序,它在单独的线程中运行任务。每个任务都有一个处理和存储其输出的对象。每个任务创建不同的业务逻辑对象,可能还会创建另一个线程或线程池。
我想做的是为任务运行的任何业务逻辑对象提供一种简单的方式来访问每个任务的输出,而无需手动将"输出"对象传递给每个业务逻辑对象。
我看到的是创建输出singleton工厂并在TLS中存储task_id。但问题是,当业务逻辑创建了一个新的线程或线程池,而这些线程在TLS中没有task_id时。通过这种方式,我需要访问父线程TLS。
另一种方法是简单地获取自任务开始以来的所有输出。在那段时间里,会有不同任务的输出,但至少,总比什么都没有好。。。
我正在寻找任何干净漂亮的方法来解决我的问题的建议或想法。谢谢
upd:是的,我同意,这不是单身。我只想能够访问这样的对象:
output << "message";
就是这样。不用担心在业务逻辑类之间传递指向输出对象的指针。我需要每个任务都有一个全局输出对象。
从应用程序的角度来看,它们不是singleton,那么为什么要像对待singleton一样对待对象呢?
我会创建一个输出存储程序的新实例,并将(smart?)指针传递给新线程。主函数可能会将指针放在TLS中,从而使实例在每个线程中都是全局的(我不认为这是一个明智的设计设想,但这是有要求的)。当创建一个新的(子?)线程时,可以再次传递指针。因此,根据我的说法,不需要单身人士或工厂。
如果我理解正确,您希望有多个类实例(每个实例不一定是同一个类)都能够访问一个需要线程安全的公共数据池。我能想出几种方法来做到这一点。第一个想法是将这个数据池放在其他每个类都包含的类中。这个数据池实际上将把它的数据存储在一个静态成员中,这样即使数据池类有多个实例,也只有一个数据实例。然后,该类将具有访问此静态数据池的访问器方法(以便它是透明的)。为了确保线程安全,您需要通过互斥锁或类似的东西进行访问。
- C++一个线程如何正确通信其任务已完成?
- 编写一个读取五个整数并执行一些任务的C++程序
- 父类有 26 个构造函数重载.如何在不复制+粘贴 26 个重载的情况下将一个小任务附加到所有构造器?
- 我是否需要在VSCODE中创建一个任务
- 我的任务是在框架内打印一个字符串,例如一个正方形
- 几个单身汉:每个任务一个
- 取消一个c++11异步任务
- 将执行从一个线程移动到另一个线程,以实现任务并行性并在将来调用
- 当我打开一个新对话框时,如何禁止在Qt编程的Windows任务栏中显示对话框
- 任务在删除其中一个迭代对象时会导致段错误
- MFC PreCreateWindow,用于创建一个填充除任务栏之外的屏幕的窗口
- 需要在原生代码中调度一个计时器任务,用于安卓 ndk 开发
- 具有两个窗口的C++中的应用程序.任务栏中显示的一个窗口.另一个未显示
- 为一个任务设置固定线程数的TBB,为其他任务设置默认线程数
- 每个任务一个异步线程
- 从c++启动一个c#应用程序,并在该应用程序上执行一个任务
- 创建一个占用特定CPU和RAM数量的任务
- 基于前一个任务的sigchld()执行新任务
- 让一个任务运行固定数量的指令
- 如何先启动另一个终端任务