2

有人在此站点上发布了两个线程的简单互斥算法。

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;
}

对于 Thread0get_id()返回false,对于 Thread1 它返回true。这tset()是一个原子测试和设置函数,它将其参数的值设置为true并返回前一个值。

在被作者删帖之前,对于这个算法是否没有竞态条件或者死锁的问题,不同的用户给出了不同的答案。

如何分析这个算法?

4

0 回答 0