定义和伪代码
TestAndSet(TS指令和TSL指令)用硬件来实现,booleanTestAndSet()的过程一起呵成,属于原子操作。
booleanTestAndSet (boolean *lock){
boolean old = *lock;
*lock= TRUE;
return old;
}
while(TestAndSet(&lock));
criticalsection;//临界区
lock= FALSE;
remaindersection;//剩余区
原理解析
TS指令通过返回old临时变量,即使上锁和检查是两个步骤,不具有原子性,但通过返回的old临时变量的值保存的是上锁时lock的值,在多线程并发执行的时候不会存在线程安全问题。这个临时变量的使用值得借鉴。