对于多线程如何找到应该加锁的部分的步骤是:
1、先要明确那些是多线程操作的语句;
2、从操作语句中找到共享数据;
3、通过共享数据找出操作共享数据的操作语句;
4、对语句进行分析是否有加锁的必要;
对于死锁有四个必要条件:
(a)、互斥使用(资源独占)
一个资源每次只能给一个进程
(b)、不可强占(不可剥夺)
资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放
(c)、请求和保持(部分分配,占有申请)
一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)
(d)、循环等待
存在一个进程等待队列
{p1,p2,......,pn}
其中p1等p2的占有资源,p2等待p3的占有资源,以此类推
对于死锁的个人理解是,例如有两个锁,一个锁中的资源请求另一个锁中的资源,可另一个所中的资源请求本锁的资源,两者互不相让最终产生死锁。在编写程序中同步中嵌套同步会出现死锁的问题。