线程同步
可借助Inerlocked类,无需锁定任何对象即可获取到正确结果,Inerlock提供了Increment、Decement和Add等基本数学操作的原子方法:Interlocked.Incement(ref _count)
1.尽量避免使用共享对象,那么就无须进行线程同步,重新设计程序可以移除共享状态,从而去掉复杂的同步构造
2.必须使用共享状态,就只使用原子操作:操作只占用一个量子的时间,一次就可以完成,所以只有当前操作完成之后,其他线程才能执行其他操作,因此无须实现其他线程等待当前操作完成,避免了使用锁,也排除了死锁
3.内核模式:如果上述两种方法还是不行,那么就不得不使用不同的方式来协调线程,第一种方式:设置等待的线程为阻塞状态(:线程处于阻赛状态只会占用尽可能少的CPU时间,意味着将至少引入一次所谓的上下文切换(context switch)(:操作系统的线程调度器)),调度器会保存等待的线程状态,并切换到另一个线程,依次恢复等待的线程状态。这需要消耗相当多的资源。如果线程需要被挂起的很长的时间,这样做是值得的。这种方式简称为内核模式(kernel_mode),只有操作系统的内核才能阻止线程使用CPU时间。
4.用户模式:如果线程只需要等待一小段时间,最好只是简单的等待,而不用将线程切换到阻塞状态,虽然线程切换到阻塞状态,虽然线程等待会浪费CPU时间,但我们节省了上下文切换耗费的CPU时间,模式为:用户模式(user_mode)。如果线程需要等待较长时间会浪费大量时间
5.混合模式(hybrid):合理的使用内核模式和混合模式,尝试使用用户模式等待,如果线程等待了足够长的时间,则会切换到阻塞状态以节省CPU资源
原文:http://www.cnblogs.com/bigbear1385/p/5107539.html