我有一个接收线程,当来自不同src的消息到来时,线程将打开一个文件,并用消息内容更新它。现在我遇到了一个问题,我的日志获取错误消息“打开文件错误”如下:
2018/04/26 10:28:44.222 I Thread2821收到消息:src = 5
2018/04/26 10:28:44.223 I Thread2821收到消息:src = 0
2018/04/26 10:28:44.482 I Thread2821收到消息:src = 1
2018/04/26 10:28:44.482 E Thread2821错误打开**文件:C:\ writting.txt
2018/04/26 10:28:44.482 I Thread2821收到消息:src = 2
2018/04/26 10:28:44.482 E Thread2821错误打开**文件:C:\ writting.txt
2018/04/26 10:28:44.482 I Thread2821收到消息:src = 3
2018/04/26 10:28:44.482 E Thread2821错误打开**文件:C:\ writting.txt
代码结构很旧,它没有使用消息队列。从日志中,来自src1 / 2/3的消息,同时打开文件。
线程代码:
Receiver::Run(){
if( Msg.ReadStream(buffer, nLen))
{
pMsg = messageFactory().CreateMessage(Msg);
...
parentThread->ProcessMessage(pMsg); // update file here
} }
有没有解释为什么线程同时打开文件?什么Senario可能会导致这个问题。我认为它至少应该有时差。