Synchronized()
方法时,它会一直等到EnterCriticalSection(ThreadLock)
返回。 现在,如果同时运行该方法,另一个Tthread,甚至主线程调用等待Tthread的某些方法?
答案 0 :(得分:2)
如果在此期间,另一个线程,甚至主线程调用等待线程的某些方法会发生什么?
线程没有方法,所以这个问题不是一个问题。
询问调用另一个线程的方法时会发生什么是没有意义的。因为不可能这样做。当你调用一个方法时,该方法在调用它的线程上执行。
像TThread.Synchronize
这样的方法将代码的执行安排在不同的线程上。但是,TThread.Synchronize
的主体由调用者的线程执行。
用户模式代码无法中断对EnterCriticalSection
的调用。因此,假设线程A在线程B持有锁的点处调用EnterCriticalSection
。在线程B释放锁之前,对线程A的EnterCriticalSection
调用不会返回。当线程A被阻塞等待获取锁时,线程A上不会执行任何代码。
从评论中的澄清看,您的问题实际上似乎是:
当调用
TThread
的方法时,该方法执行哪个线程?
答案是该方法在调用线程上执行。 TThread
类没有什么特别之处,因此适用常规规则。