哪个线程将运行TThread实例的方法? (在等待模式下)

时间:2013-08-05 12:46:41

标签: windows multithreading delphi synchronization delphi-6

  • 当TThread进入Synchronized()方法时,它会一直等到EnterCriticalSection(ThreadLock)返回。

现在,如果同时运行该方法,另一个Tthread,甚至主线程调用等待Tthread的某些方法?

1 个答案:

答案 0 :(得分:2)

  

如果在此期间,另一个线程,甚至主线程调用等待线程的某些方法会发生什么?

线程没有方法,所以这个问题不是一个问题。

询问调用另一个线程的方法时会发生什么是没有意义的。因为不可能这样做。当你调用一个方法时,该方法在调用它的线程上执行。

TThread.Synchronize 这样的方法将代码的执行安排在不同的线程上。但是,TThread.Synchronize的主体由调用者的线程执行。

用户模式代码无法中断对EnterCriticalSection的调用。因此,假设线程A在线程B持有锁的点处调用EnterCriticalSection。在线程B释放锁之前,对线程A的EnterCriticalSection调用不会返回。当线程A被阻塞等待获取锁时,线程A上不会执行任何代码。


从评论中的澄清看,您的问题实际上似乎是:

  

当调用TThread的方法时,该方法执行哪个线程?

答案是该方法在调用线程上执行。 TThread类没有什么特别之处,因此适用常规规则。