shenkaibo

Results 3 comments of shenkaibo

知道原因了。GlobalData::RegisterService写的就有问题

多线程调用RegisterService的时候,如果service填的还是同一个,出现踩内存的场景,虽然service_id_map_是线程安全的,但是只是Get和Set接口线程安全,在通过Get拿到name后,这个name填的是二级指针,所以name本身就是service_id_map_的value,另一个线程可能会再去修改这个value,造成Get出来的name 会有多线程同时读写的风险,用我上面贴的代码去复现,基本必现。

> Will check and feedback soon. I tested it and it will indeed report an error. 修改方案: ``` uint64_t GlobalData::RegisterService(const std::string& service) { auto id = Hash(service); std::lock_guard lock(service_id_map_mutex_); while...