Multithreading 如何分析具有两个原子测试和set调用的互斥算法

Multithreading 如何分析具有两个原子测试和set调用的互斥算法,multithreading,mutual-exclusion,test-and-set,Multithreading,Mutual Exclusion,Test And Set,有人在这个网站上发布了两个线程的简单互斥算法 bool locks[2]; thread_function() { bool id = get_id(); while(1) { if (!tset(&locks[id])) { if (!tset(&locks[!id])) { x++; // critical section break; } else locks[id] =

有人在这个网站上发布了两个线程的简单互斥算法

bool locks[2];

thread_function() {
   bool id = get_id();
   while(1) {
     if (!tset(&locks[id])) {
       if (!tset(&locks[!id])) {
         x++; // critical section
         break;
       }
       else locks[id] = false;
     }
   }
   locks[id] = false;
   locks[!id] = false;
}
对于Thread0
get_id()
返回
false
,对于Thread1则返回
true
。这里的
tset()
是一个原子测试和设置函数,它将参数的值设置为
true
,并返回以前的值

在作者删除这篇文章之前,不同的用户对这个算法是否没有竞争条件或死锁的问题给出了不同的答案

如何分析这个算法