刚刚开始学习多线程的内容,看了一些例子,基本上各线程都是各做各的事,如果象下面这种情况,应该如何处理?---------------------------
for (i=0;i<XXXX;i++){比较复杂的运算过程.
}---------------------------能用多个线程来协作完成吗?第一个线程从i=0做起,第二个线程启动时发现i=5了,就从6做起,能这样吗?

解决方案 »

  1.   

    可以用openmp实现的,加上它的编译制导语句就行了
      

  2.   

    第一个线程从i=0做起,第二个线程启动时发现i=5了,就从6做起,能这样吗?
    这样的结果就是先做第一个线程,然后i=5后,做第二个,没有并发,多线程就没有意义!
    楼上说的对,可以在每个线程设置一个i
    线程1:
    for (i=0;i <5;i++){ 比较复杂的运算过程. 

    线程2:
    for (i=5;i <10;i++){ 比较复杂的运算过程. 

      

  3.   

    比较复杂的运算过程. 
    如果说你这个运算过程不存在先后关系(比如说:这个复杂的运算过程可以分解为N个没有先后关系的子过程),那么就可以在N个线程是去计算,创建线程的多少和你的循环次数应该是有一个关系的,并且这个关系如果搞得不好(比如:i加一次,就创建一个线程,线程太多了会严重影响计算效率的,),我曾经用过一种方式,把N分为了十份,不管N有多大,基本上可以分为十个线程来计算;
      

  4.   

    用Innerlocked.Increase做计数器就可以了,动态分配两个线程的任务提高效率
      

  5.   

    楼主去看看intel 的 openMP技术,对于多处理器硬件条件下的 for 循环的并行运算多线程处理极为方便易用,我觉得这是你该需要了解的。
      

  6.   

    搜了一下,发现这个解决方法最接近我的问题,解决了!过几天结贴,大家评论评论。http://blog.csdn.net/zhoufoxcn/archive/2008/05/17/2453803.aspx
      

  7.   

    LZ怎么应该认真考察下这个方法,那个blog下面都有人评论了,那种方式根本就不会提高效率。
      

  8.   

    用多个线程去删除数组元素只是该贴举的例子,目的当然不是为了删元素,但假设我把一个目录下的所有EXCEL文件名读入数组,多个线程到数组中取文件名,对文件做进一步处理比如查询数据,输出到sql等,处理完取下一个文件名再继续,这就须要线程同步了吧,这就不致于没用吧?--------------------------- 
    for (i=0;i <XXXX;i++){ 比较复杂的运算过程. 
    } --------------------------- 
    其实XXXX就可以看做该数组元素总和。
    我对多线程也是刚学习,这样能不能提高效率也没底,还望大家多多指教。