中国开发网: 论坛: 程序员情感CBD: 贴子 275204
王中王
简单分析
线程中的Synchroize方法是这样的机制:
1、准备好要主进程执行的内容
2、通知主进程执行
3、“等待”主进程执行完“要执行的内容”
4、主进程在适当的时候检查各线程提交的要在主进程执行的内容,并执行。
5、主进程执行结束,“等待”的线程收到信号变化,继续执行。
注意,线程调用主进程中定义的事件和线程通过Synchornize调用主进程定义的事件完成是两回事。前者在线程中执行,后者在主进程中执行。

你的问题在于,我只说一种死锁会存在的情况(这种情况下程序挂死,当然不会处理任何消息),先整理一下前提:A线程使用Synchronize在主进程中进行LockList操作,B线程在线程中进行LockList操作取数据,并做处理。B线程的对数据的处理,你虽然未说使用synchroize方法,但从“把内容显示在Memo”来看,应该也是会用到Synchronize。
前提就是这些了。
注意,在某个时间点,假设列表中已经有了数据:
B线程LockList,取出了数据,(正常的话应该马上UnlockList,不知你是否做了),并调用Synchronize通知主进程进行执行“修改Memo内容的操作,然后等待主进程给完成消息。而此时,主进程正在处理A线程在Synchronize中提交的事件方法,做LockList操作,而List正被B线程锁着,所以主进程等等解锁,B线程又在等待主进程执行提交的内容,于是一个死锁产生了。

不要把主进程看得有多特殊,实际上还是两上线程相互等待发生死锁的问题
Synchronize方法隐藏的使用了一个“锁”,并有WaitFor操作,这是个陷井,很容易掉进去。
http://wangzw.wordpress.com/
个性化台历、日历制作
http://shop33697570.taobao.com/

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录