Concurrency 如果(锁定)等待其他锁定=1 CS锁定=0

Concurrency 如果(锁定)等待其他锁定=1 CS锁定=0,concurrency,synchronization,locking,Concurrency,Synchronization,Locking,考虑同步机制的这种可能实现,其目标是一次只有一个线程在关键部分(CS)中: if (lock) wait else lock=1 CS lock=0 这对多处理器系统有效吗?不。这甚至对单处理器系统都不起作用。假设有两个线程执行此操作。可以这样安排: thread1 thread2 if (lock) /*false*/ if (lock) /*false

考虑同步机制的这种可能实现,其目标是一次只有一个线程在关键部分(CS)中:

if (lock)
      wait
else
     lock=1
      CS
     lock=0

这对多处理器系统有效吗?

不。这甚至对单处理器系统都不起作用。假设有两个线程执行此操作。可以这样安排:

thread1                     thread2
if (lock) /*false*/
                            if (lock) /*false*/
                            lock=1
lock=1
/*CS*/
                            /*CS*/
/*CS continues*/
                            /*CS continues*/
                            lock=0
lock=0

你不能用这种方式实现锁定。实现锁定的方法之一是使用处理器指令,该指令以原子方式检查变量的当前值并分配给它,例如。(还有许多其他可能的方法,不同的CPU提供不同的方法,有时不止一种。)

不。这在单处理器系统上甚至不起作用。假设有两个线程执行此操作。可以这样安排:

thread1                     thread2
if (lock) /*false*/
                            if (lock) /*false*/
                            lock=1
lock=1
/*CS*/
                            /*CS*/
/*CS continues*/
                            /*CS continues*/
                            lock=0
lock=0

你不能用这种方式实现锁定。实现锁定的方法之一是使用处理器指令,该指令以原子方式检查变量的当前值并分配给它,例如。(还有许多其他可能的方法,不同的CPU提供不同的方法,有时不止一种。)

@H2CO3上下文很容易推断,如果你知道主题的话。我在@H2CO3上下文中编辑过它,不过如果你知道这个主题,很容易推断。我已经编辑好了。你能告诉我一种方法,我们可以为单处理器系统纠正这个代码吗?测试和设置只会使它在多处理器系统中工作,对吗?@Gaurav测试和设置是一种锁实现的构建块,适用于在很短时间内使用的锁。您需要确保其他线程可以在线程执行
wait
时运行。在单处理器系统上,自旋锁除了作为具有等待队列的互斥体的构建块外几乎没有什么用处,但它可以在不考虑处理器数量的情况下工作。您能告诉我们如何为单处理器系统更正此代码吗?测试和设置只会使它在多处理器系统中工作,对吗?@Gaurav测试和设置是一种锁实现的构建块,适用于在很短时间内使用的锁。您需要确保其他线程可以在线程执行
wait
时运行。在单处理器系统上,自旋锁几乎没有什么用处,只是作为具有等待队列的互斥体的构建块,但无论处理器数量多少,它都可以工作。