C++ 同步线程';创建和销毁(静态)对象

C++ 同步线程';创建和销毁(静态)对象,c++,multithreading,static,C++,Multithreading,Static,糟糕的标题,我知道,但(现在)我想不出更好的了 假设我有几个对象,类的实例如下: class MyWorker: public Thread { public: void Reconnect(...); //... private: void DoDisconnect(); ConnectionPtr m_ptrConnection; }; 每个对象都是独立的线程连接PTR是一个参考计数智能指针 重新连接首先执行DoDisconnect,这将取消mptrcon

糟糕的标题,我知道,但(现在)我想不出更好的了


假设我有几个对象,类的实例如下:

class MyWorker: public Thread
{
public:
    void Reconnect(...);
    //...
private:
    void DoDisconnect();
    ConnectionPtr m_ptrConnection;
};
每个对象都是独立的线程<代码>连接PTR是一个参考计数智能指针

重新连接
首先执行
DoDisconnect
,这将取消
mptrconnection
(以减少引用计数器),然后执行
ConnectionFactory::Create

class ConnectionFactory
{
private:
    ConnectionFactory();

public:
    ConnectionPtr Create( ... );

private:
    //...
    void Destroy();
    static m_mutex;
    static ConnectionPtr m_ptrConnection;
};
在这里,
Create(…)
调用
Destroy()
,然后重新初始化
m\u ptrConnection
成员,并将其作为结果返回

其思想是,
MyWorker
的所有实例都将使用相同的
连接(这并不重要)

问题如下:
MyWorker
的所有实例必须首先调用其
DoDisconnect
(以减少引用计数器),然后执行
Create
(当
Create
执行
Destroy
时,
连接的引用计数器必须为1(只有静态指针应该是非空的)

我如何才能做到这一点

听起来像是一个糟糕的设计,而且“太本地化了”,我知道。我不能改变
MyWorker
的设计,事实上,
Reconnect
首先调用
DoDisconnect
。如果有人有更好的主意,我可以稍微改变
ConnectionofAction
的设计


当前,我锁定静态
互斥锁
以同步对
m_ptrConnection
的访问。如果
m_ptrConnection
已被其他线程重新初始化,则
Create
将返回
唯一的问题是,如何确保所有
MyWorker
线程都先执行了它们的
DoDisconnect
?以某种方式使用第二个
mutex
?或某个静态线程安全(原子)计数器?

[来自问题的评论]


您可以在
DoDisConnect
Destroy
之间插入一个线程屏障,以确保在
Destroy
之前所有线程都已完成
DoDisConnect
。为了了解一些情况,您可以看看,它使用了
mutex
condition\u变量
/p>Grrrr,我无法更好更准确地解释这一点简而言之。如果我正确理解了您的问题,您只需在
DoDisconnect
之后和
Destroy
@user2k5之前添加一个线程屏障-什么是线程屏障?(听起来这是我需要的,但仍然如此)屏障将阻止线程,直到一定数量的线程到达同步点。您可以查看以获取一些想法。@user2k5-您是否可以发布您的评论(可能有点扩展)作为答案?我会接受它。这是我真正需要的。谢谢:)