记一次线程不同步的坑

2017-08-25
1分钟阅读时长
c++

memcpy_Image.png

这段简单的代码, 总是在某些时候, 就会出现p_cur_ctx->GetCallbackContent()不为空, 但是总是memcpy失败的问题. 这下无语了, 系统库有问题了吗 ?! WTF, 遇见鬼了, 从来没有见过如此诡异的问题.

gdb p_cur_ctx->GetCallbackContent()

gdb tmp

怎么看, 这都是不可能发生的事情!!!, 为什么memcpy会失败呢?

再看GetCallbackContent()的代码实现

GetCallbackContent实现

感觉上没有什么问题, 这个问题就诡异了.为什么以前程序跑的好好的, 突然间连memcpy都不靠谱了.这个世界是怎么了.

坐下来仔细想想, 发现这个原来是自己设计框架时候留下的.

坑

当时设计的线程安全的单例模式, 然后也没有仔细考虑两个线程的同步的问题, 是粗心了.

修改后的程序

Paste_Image.png

再也没有出现这个问题. 哎, 到处都是坑.