debug和release编译结果在多线程的遇到的一个问题
今天完成了统计20G单词文件中单词频率的程序,先生成了一个500M的文件做测试。程序大体是这样的:
- 我设计了一个缓冲池,用来存放读文件线程读到的单词。缓冲池中有很多缓冲块,每个缓冲块都使用一个我设计的计数器来统计该缓冲块中出现过的单词频率,最后在主线程中合并计数器。
- 每个缓冲块都有两个事件内核对象,一个表示块可读,一个表示块可写,两个都是自动重置事件对象
- 整个缓冲池有一个表示完成统计的事件对象,每个计数线程都会在一个while循环中等待读文件线程把可事件激活一定的时间,否则激活完成事件;而读文件线程的同时等待所有计数线程把缓冲块的可写事件激活,或者等到缓冲池的完成事件
- 整个程序有一个读文件线程和若干计数线程。
就是上面的“一定时间”让我想了好久,最后还是在程序中输出调试信息才发现这个问题的!
我很早就知道release编译结果会存在代码优化,从而提高执行速度。但是从没想到过这种速度的提升对于多线程中的设置了等待一段时间的等待函数也有影响。
当程序被优化以后,以前需要等待的时间可能会很快就过了,所以在release版本中要注意调整wait函数等待的时间,变大或者变小,否则你的任务可能没有执行完全部就退出了。
特此记录下来。。。。。。。。。