1
我以前知道关键部分不能用于进程,因为它们不是内核对象。但是在现代操作系统中,我看到了两个可以与进程一起使用的实现。互斥体和临界区之间的边界是什么?
实现与TSL:
enter region:
TSL REGISTER,LOCK | copy lock to register and set lock to 1
CMP REGISTER,#0 | was lock zero?
JNE enter region | if it was not zero, lock was set, so loop
RET | return to caller; critical region entered
leave region:
MOVE LOCK,#0 | store a 0 in lock
RET | return to caller
实现与XCHG:
enter region:
MOVE REGISTER,#1 | put a 1 in the register
XCHG REGISTER,LOCK | swap the contents of the register and lock variable
CMP REGISTER,#0 | was lock zero?
JNE enter region | if it was non zero, lock was set, so loop
RET | return to caller; critical region entered
leave region:
MOVE LOCK,#0 | store a 0 in lock
RET | return to caller
所以无论关键部分可用于进程完全取决于实施?互斥体和临界区之间的边界在哪里,我们可以将上面的代码称为临界区或它是互斥体的代码?
谢谢。