add lock for heartbeat for multi-process
Co-authored-by: zhiweihai_00958272<zhiweihai@huawei.com>
# message auto-generated for no-merge-commit merge:
!1667 merge heartbeatAddLock into master
add lock for heartbeat for multi-process
Created-by: Helmar
Commit-by: Helmar;zhiweihai_00958272
Merged-by: cann-robot
Description: ## 描述
<!--在这里详细描述你的改动,包括改动的原因和所采取的方法。-->
**第一次调用:**
1.创建一个新线程(运行HeartbeatStatusMonitor)。
2.sendRecvThread_接管该线程对象的所有权。
此时线程已启动并在后台运行。
**第二次调用:**
1.sendRecvThread_.reset(..)会先析构当前持有的 std:thread对象。
2.但std::thread 的析构函数有严格要求:
·如果线程可joinable(即既没join()也没detach()),则调用析构函数会抛出异常或直接调用std:terminate(),导致程序崩溃!
这是未定义行为(C++11起:会调用std::terminate)!
本次修改的解决方案,**心跳的Init过程**中加锁
## 关联的Issue
<!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。-->
<!-- 如果这个PR不涉及Issue,可填写"NA"。-->
【DTS2026033127322】1981单机 ,两个子通信域(子通信域用的rank相同),两个子通信域多线程并发分别下发allreduce和allgather(下发算子之前创建context),概率性会core
## 测试
<!--描述进行了哪些测试来验证你的改动。包括但不限于构造对应xx测试用例、二级冒烟、算子泛化等。-->
1. 在心跳机制里面加了锁,本来没加锁在并发场景下可能会有问题,当前压测50次没有出现core;测试用例验证通过
2. A3-RDV全量用例通过,其他rdv用例确认未引入问题
## 文档更新
<!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。-->
## 类型标签
<!-- [x] 表示选中 -->
- [x] Bug修复
- [ ] 新特性
- [ ] 性能优化
- [ ] 文档更新
- [ ] 其他,请描述:
See merge request: cann/hcomm!1667