第一次调用: 1.创建一个新线程(运行HeartbeatStatusMonitor)。 2.sendRecvThread_接管该线程对象的所有权。 此时线程已启动并在后台运行。 第二次调用: 1.sendRecvThread_.reset(..)会先析构当前持有的 std:thread对象。 2.但std::thread 的析构函数有严格要求: ·如果线程可joinable(即既没join()也没detach()),则调用析构函数会抛出异常或直接调用std:terminate(),导致程序崩溃! 这是未定义行为(C++11起:会调用std::terminate)!
本次修改的解决方案,心跳的Init过程中加锁
【DTS2026033127322】1981单机 ,两个子通信域(子通信域用的rank相同),两个子通信域多线程并发分别下发allreduce和allgather(下发算子之前创建context),概率性会core