刚刚开始学习多线程的内容,看了一些例子,基本上各线程都是各做各的事,如果象下面这种情况,应该如何处理?---------------------------
for (i=0;i<XXXX;i++){比较复杂的运算过程.
}---------------------------能用多个线程来协作完成吗?第一个线程从i=0做起,第二个线程启动时发现i=5了,就从6做起,能这样吗?
for (i=0;i<XXXX;i++){比较复杂的运算过程.
}---------------------------能用多个线程来协作完成吗?第一个线程从i=0做起,第二个线程启动时发现i=5了,就从6做起,能这样吗?
这样的结果就是先做第一个线程,然后i=5后,做第二个,没有并发,多线程就没有意义!
楼上说的对,可以在每个线程设置一个i
线程1:
for (i=0;i <5;i++){ 比较复杂的运算过程.
}
线程2:
for (i=5;i <10;i++){ 比较复杂的运算过程.
}
如果说你这个运算过程不存在先后关系(比如说:这个复杂的运算过程可以分解为N个没有先后关系的子过程),那么就可以在N个线程是去计算,创建线程的多少和你的循环次数应该是有一个关系的,并且这个关系如果搞得不好(比如:i加一次,就创建一个线程,线程太多了会严重影响计算效率的,),我曾经用过一种方式,把N分为了十份,不管N有多大,基本上可以分为十个线程来计算;
for (i=0;i <XXXX;i++){ 比较复杂的运算过程.
} ---------------------------
其实XXXX就可以看做该数组元素总和。
我对多线程也是刚学习,这样能不能提高效率也没底,还望大家多多指教。