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;
}
对于Thread0get_id()
返回false
,对于Thread1则返回true
。这里的tset()
是一个原子测试和设置函数,它将参数的值设置为true
,并返回以前的值
在作者删除这篇文章之前,不同的用户对这个算法是否没有竞争条件或死锁的问题给出了不同的答案
如何分析这个算法