Conner 的个人资料☆ Conner Wang ☆照片日志列表更多 ![]() | 帮助 |
|
10月2日 多处理器环境下不出错而单处理器环境下却出错的多线程程序多线程程序比单线程程序要考虑的东西要多的多,如临界区、竞争、死锁、资源的维护等等。今天我写程序的时候就犯了一个低级的错误,从而导致我的程序在多CPU环境下可以运行而在单CPU环境下却出问题。 程序是用VC写的,共有两个线程:一个是GUI线程,一个是数据处理线程。处理线程会产生日志信息,日志信息会经过两种方式被处理:1. 通过发消息从而在GUI界面里增量显示;2. 在处理线程中将日志信息增量写入日志文件。 我的日志信息是一个CString,它是在堆里动态分配的。我最初的程序是将日志信息的地址发给GUI线程,GUI线程显示完毕后释放这部分内存。后来我又加上了日志写入文件这一功能,就是日志信息在GUI界面显示完毕后还会在处理进程中写入日志文件。 由于我的开发环境是多核环境,一开始并没有什么问题,但当我将程序运行在单核机器上时,有时会出问题,说是某个引用的地址0x00000000无效。经过调试我才发现问题出在内存释放这一部分:在我的多核系统中,日志信息在两个线程中同时被使用,由于GUI进程处理的稍慢,所以当它释放内存时,处理进程已经使用完,所以不出错;而在单核系统中,同时只有一个进程在运行,如果写入日志文件的操作晚于GUI线程释放内存的操作,则系统会出现问题。 找到了问题的根源所在,修改就很简单了,方案有两种: 教训: |
|
|