【发布时间】:2019-03-27 15:41:34
【问题描述】:
我想实现一个多线程队列as in this example
但我的问题是要了解完整的模型。
为了让每个线程都推送/弹出到同一个队列中,我必须将 SafeQueue 设为 Singleton。这是正确的吗?
比我需要一些线程安全的单例初始化吗?
应该是这样的:
____________
| |
| Thread 1 | ---------
|__________| |
|
____________ ----------> ____________
| | | |
| Thread 2 | ------------------> | Queue |
|__________| |__________|
--------->
____________ |
| | |
| Thread 3 |-----------
|__________|
或者我应该在创建线程之前启动队列并将队列对象传递给每个线程吗?
【问题讨论】:
-
不需要单例,线程可以共享同一个队列对象。重要的是保护推送和弹出不会同时访问。
-
推送/弹出将受到互斥锁的保护。 “......线程无论如何都可以共享相同的队列对象......” -> 我应该怎么做?
-
看看here
-
线程不像进程。进程中的所有线程共享内存。您可以将一个对象的指针或引用传递给所有线程,只要该对象处于活动状态,所有线程都可以取消引用该指针或引用。
-
好的,所以这应该和我的最后一句话一样(或者我应该在创建线程之前启动队列并将队列对象传递给每个线程?)对吗?
标签: c++ multithreading