2

请注意,FIFO 排序必然适用于这些方法中的特定内部执行点。

来自文档

它们对内部执行点意味着什么?

4

2 回答 2

4

在那之后,文档立即说:

因此,一个线程可能在另一个线程之前调用acquire,但在另一个线程之后到达排序点

这意味着这种情况是可能的:

thread 1                 thread 2
--------                 --------
calls acquire()
                         calls acquire()
                         acquire() does its job
acquire() does its job

acquires() does its job文档所说的“订购点”在哪里)

简而言之:不能保证,及时地,第一个线程调用首先acquire()获取信号量。可以保证的是,当它从 中返回时,acquire()其他acquire()调用者将不得不等待。

这是一种罕见的情况,但有可能发生。

于 2013-05-31T19:43:18.183 回答
1

它们指的是 acquire() 方法内部的执行点。他们的意思是,在acquire() 的实现中,有一些“排序点”,第一个到达那里的线程将第一个离开。因此,如果线程 A 获得调用在 B 之前进入 acquire(),但 B 先到达排序点,则 B 将首先出来(尽管进入第二个)。

于 2013-05-31T19:43:57.170 回答