一个简单的多线程程序,每一个线程都会根据一个输入的文本,生成其对应的声音文件。我在单核的电脑上运行是没有任何问题的。但是当我在双核的电脑上运行时,生成的声音文件有的好,有的则会有问题,运行过程中也没有报什么错误,就是结果有问题。我在主进程中开辟了几十M的空间,用于存放一些资源数据,各个线程都会对这片区域进行读操作。不知道是不是在双核情况下,非运行主进程的CPU在访问主进程的数据区时,会有什么问题或者限制? 

解决方案 »

  1.   

    这类问题应该就是线程同步没有处理好,因为多核比单核对线程同步的要求更严格,一些问题在单核上不会出现或者不容易出现,而在多核上就很容易出现。看看是否存在多个线程同时访问同一资源的情况(所有线程都只读的除外)。
      

  2.   

    各个线程对公共资源的访问都是只读的方式啊,没有写的
      

  3.   

    生成的声音文件是每个线程生成一个吗?获得数据的大概过程是什么?
      

  4.   

    每个线程都会有一个输入文本,该线程会将生成该文本对应的声音文件。是一对一的关系。 
    主进程一开始会开辟一个几十M的空间,里面存的是一共公共资源,包括波形数据,一些分析数据等。每个线程在生成声音文件的时候都会对主进程中开辟的数据区域进行读的访问。线程函数中对读过来的数据会再进行一些信号上的处理,最后生成声音文件。过程就是这样的。
      

  5.   

    各个线程中有没有对全局变量做修改?
      

  6.   

    因为对于双核系统下多线程的开发没有什么经验,也不知道是否存在什么需要注意的地方,因此发贴求助! 如果大家说双核下和单核下的多线程并没有什么本质的区别,依旧是只要保证好线程之间的同步就可以了,那我就还是老老实实的检查自己的程序吧,看看是否还是有共享区域的访问问题,。
      

  7.   

    经过仔细查找,还真的找到了有这么个全局变量会被改写的。应该就是它而导致的。因为整个程序比较庞大,这个地方之前没有检查到,另外我在单核下多线程运行时竟然没有出问题,应该是双核下对于线程同步的要求更严格,因此才暴露了出来。 谢谢各位的指点。