CLR via C# 读书笔记 42 线程和锁的一些使用原则

1.如果可以,尽可能使用线程池中的线程, 因为自己创建,维护销毁一个线程会极大的消耗CPU和内存资源,如果需要定时工作,那么请使用System.Threading.Timer

2.在读多写少的情况,使用读写锁ReaderWriterLockSlim (不要使用ReaderWriterLock), 因为这样读操作之间不会互斥

3.尽量不要使用递归的锁 ,当然Moniter是个例外,他虽然使用了递归, 但是他的性能也挺好的,(lock关键字内部就是使用Moniter, Moniter其实使用本地代码执行,而不是托管代码,所以性能比较ok)

4.不要在finally方法里面释放锁(lock就是这样做的),因为这样在抛出异常的时候数据玩玩有问题,那么执行了finally以后,下一个被堵塞的线程就进来执行了,那么他将在错误的状态上执行  (我个人对这个持保留意见....)

5.在执行计算任务的时候,推荐使用Task来替代线程同步, 特别是Task中的ContinueWith

6.在执行I/O任务的时候,推荐使用APM异步编程模型加上回调函数来处理

7.

原文地址:https://www.cnblogs.com/PurpleTide/p/1894160.html