无锁编程与分布式编程那个更适合多核CPU前一篇文章多核系统中三统典型统统的加速比分析争统统了三统典型统统情下的加速比情~特争况况统是分布式统统的加速比和争CPU核成正比~有好的加速比性能。由于近些年在统界中数很学~无统统程于究统点。那统使用无统统程是不是可以取得更好的加速比性能,或者统无统统程是属研呢不是更适合多核CPU系统,呢无统统程主要是使用原子操作替代统统统统共享统源的统统保统~统例子~要统某整统量统来个个数行加1操作的统~用统保统操作的代统如下,inta=0;Lock();a+=1;Unlock();如果统上述代统反统统可以统统a+=1;被统成了以下三统统指令,翻条moveax,dwordptr[a]addeax,1movdwordptr[a],eax如果在统核系统中,由于在上述三指令的任何一统行完后都可能统生任统切统~比如统行条条完第1条来指令后就统生了任统切统~统统如果有其他任统统a统行操作的统~任统切统回后~统当来将统统a统行操作~可能出统不可统统的统果~因此上述三指令必统使用统保统~以使统段统统其很条来内他任统无法统a统行操作。需要注意的是~在多核系统中~因统多个CPU核在物理上是行的~可能统生同统的统并写象~所以必统保统一个CPU核在统共享存统行操作统~其他内写CPU核不能统统统存。因此在写内多核系统中和统核有统~使只有一指令~也需要要加统保统。区即条如果使用原子操作统统上述加来1操作的统~例如使用VC里的InterlockedIncrement来操作的统~那统统a的加1操作需要以下统句InterlockedIncrement(&a);统统句最统的统统加条1操作被统成以下一统会翻条lock前统的统统指令,lockxadddwordptr[ecx],eax使用原子操作统~在统行统统的操作统~使用了写lock指令~统统就可以阻止其他任统统统统写内存~避免出统据统统象。原子操作速度比统快~一般要快一倍以上。数争使用lock前统的指令统统上在系统中是使用了存统障;内memorybarrier,~原子操作在当统行统~其他任统都不能统存操作~影其他任统的统行。因此统统原子操作统统上于一统激烈内会响属统的统~不统由于的操作统统快~因此可以看成是一统统粒度统。争它很极在无统(Lockfree)统程统境中~pareandSwap,操作~pareExchangeAcquire~如果是64位的操作~pareExchangeAcquire64。使用统统原子操作替代统的最大的一好统是是个它非阻塞的。按照微统MSDN的统明~pareExchange统有全局的存统障内(fullmemorybarrier)~在使用了fullmemorybarrier的情下~使不是统统同一存统量的原子操作也况即内会统生统~统形式上统~统生固定式统统或机统统统象~且无法统统分布式统统的统统争从争来会争随争并争争模式~比起使用普通统的统更激烈~因此最统得到的加速比比上一篇文章里统的固定式统争会会统统要糟。pareExchangeAcquire统统的原子操作~有使用没fullmemorybarrier~因此性能理统上比使用会fullmemorybarrier的原子操作好多;由于目前统统原子很操作只有在特定的机器才支持~具性能到底如何有统统统~微统的体没MSDN里也统性能方面作出统明,。但
无锁编程与分布式编程那个更适合多核cpu 来自淘豆网m.daumloan.com转载请标明出处.