C++ 静态类成员指的是自身

标签 c++ multithreading

我很好奇这是否是我能做的事情:

using namespace tthread;
class E_thread {
    static std::list<E_thread*> all_threads;
    thread th;
    E_messageQueue queue;
public:
    E_thread(void (*threadFunction)(void *), void * threadFuncArg) {
        all_threads.push_back(this);
        th = thread(threadFunction,threadFuncArg);
    }
    ~E_thread() {
        queue.push_terminate_thread_message();
        th.join();
        all_threads.remove(this);
    }
};

我的目的是让任何线程都可以轻松地生成新线程或向另一个线程发送消息,并且线程列表也能够自行清理。据我了解,我可以替换 all_threads与全局 std::list<E_thread*>如果我愿意的话,它的目的是相同的,但这不是获得那种“全局性”的更简洁的方法吗?

对此有点不安的是我没有强制我的新线程有一个消息读取循环,以便能够处理终止消息。

最佳答案

这很好,主要是。您需要使用某种互斥锁来保护对 all_threads 的访问(读取或修改两者)。此外,如果您在程序执行过程中经常销毁线程,则最好使用 ::std::set

另外,我有点质疑是否有任何类型的全局变量。我认为如果您有一个“线程管理器”对象并在您创建的线程中传递,或者可能有一个跟踪它创建的所有线程的线程工厂,那会更干净。

全局变量使程序更难测试,并使它们更脆弱且以后无法修改。

关于C++ 静态类成员指的是自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5386133/

相关文章:

c++ - 编译和 SPI 电机驱动器屏蔽单独工作——但不能一起工作

c++ - 使用另一个指针删除动态数组

java - Java 中的分层互斥锁

c# - 互锁和内存屏障

multithreading - 线程安全与重入

c++ - 我的代码中存在死锁/访问冲突,即使我已经相互排除它

C++复制没有指针的结构

c++ - 类导出错误(错误 C2470 : looks like a function definition)

c++ - 检测 grpc 服务器中关闭的客户端连接

c++ - QEventLoop 用于同步等待信号