奇怪的线程读取问题?
描述:
一个Console Application, 多线程环境下操作文件, 但保证在任一时刻都只有一个
线程执行SomeMethod成员函数。该函数首先将文件长度截为零, 然后将对象Serialize
到文件中。
BUG:
当Application运行中关闭Console窗体,文件的长度可能为零(有时正常,有时为零)。
尝试解决办法:
在函数中加入try, finally块,失败。
在函数中加入Thread.BeginCriticalRegion() & Thread.EndCriticalRegion() , 失败.
问题:
如果注释掉"stream.SetLength(0);"行,程序不会出现该BUG.
我的理解是,当线程运行到 serializer.Serialize 函数的时候刚好碰到我关闭Console窗口,
线程给强制退出,而stream还没来得及Write.
如果修改该Bug可以在SetLength(0)前做一个备份,但我期望能有更好的解决办法。
代码:
一个Console Application, 多线程环境下操作文件, 但保证在任一时刻都只有一个
线程执行SomeMethod成员函数。该函数首先将文件长度截为零, 然后将对象Serialize
到文件中。
BUG:
当Application运行中关闭Console窗体,文件的长度可能为零(有时正常,有时为零)。
尝试解决办法:
在函数中加入try, finally块,失败。
在函数中加入Thread.BeginCriticalRegion() & Thread.EndCriticalRegion() , 失败.
问题:
如果注释掉"stream.SetLength(0);"行,程序不会出现该BUG.
我的理解是,当线程运行到 serializer.Serialize 函数的时候刚好碰到我关闭Console窗口,
线程给强制退出,而stream还没来得及Write.
如果修改该Bug可以在SetLength(0)前做一个备份,但我期望能有更好的解决办法。
代码:
public static SomeMethod()
{
stream.SetLength(0);
...
serializer.Serialize(stream, src);
...
stream.Flush();
}
...全文
相关推荐
奇怪的小球
原创作品,创新的一款游戏,同时也是一个关于线程的作品,具有开发价值。
QT中sqlite多线程操作4个注意问题
总结了一下Qt中sqlite多线程操作遇到的几个问题,希望能对有需要的朋友一点帮助
解密返回奇怪的字符
我创建了一个解密脚本,尽管它返回了带有奇怪符号的垃圾字符串,但它可以正常执行而不会引发任何错误。 加密字符串的示例:fff:T3UZSkX4vsJxnWEaIMWK3w ==解码时:ᄒ ヨ5pチᄒ ミᄒ ワᄒ ᆰ`ᄒ ᄆ,Chホᄌᄂ脚本的一部分我是用于解密...
c++奇怪的魔塔
c++期末大作业,包含所学的各种知识点,代码易懂不超纲
什么是奇怪的数列以及学习了解奇怪的数列的意义是什么
奇怪的数列


