0

在这里,我有一个类信号量、等待和信号方法以及其他方法的实现。我的问题是,在查看等待方法时,当我们在该临界区阻塞当前线程时,何时释放等待方法内部的锁?我们可以看到阻塞方法是通过将当前线程放入阻塞队列,并从就绪队列中获取一些其他线程并发生上下文切换来实现的。如果发生上下文切换,则阻塞线程的上下文将保存在 ; 在 block() 方法之后,这意味着后面的行 (unlock()) 没有执行并且上下文被切换。因此,被阻塞的线程永远不会释放锁,还是我错过了什么?那么当我们在临界区切换上下文时,锁是如何释放的呢?这是实现: 类信号量的实现和类信号量的实现续 注意setContext方法和resume是通过setjmp和longjmp方法实现的。

4

0 回答 0