【发布时间】:2023-03-13 04:29:01
【问题描述】:
do { while (test_and_set(&lock))
; /* do nothing */
/* critical section */
lock = false;
/* remainder section */
} while (true);
boolean test_and_set (boolean *target)
{
boolean rv = *target;
*target = TRUE;
return rv:
}
我不明白它应该如何工作,因为无论 while (test_and_set(&lock) 返回什么,无论是 true 还是 false,do{} 代码仍然会运行临界区。它什么都不做,并且然后立即运行临界区,那么这如何帮助同步线程呢?
【问题讨论】:
-
这显然不是线程安全的。谁说的?
-
while( test_and_set( &lock ) );将循环直到它变为假,然后它将运行关键部分。虽然不太明白test_and_set在做什么 -
这是在您所针对的任何特定平台上吗?因为有些平台内在函数可能会为您正确做到这一点。坦率地说,要回答你关于它如何工作的问题,它没有(当然不可靠)。
标签: c multithreading synchronization