假设有两个线程同时尝试将每个N个张量排入FIFOQueue的一个实例中。即,他们正在打电话
queue_instance.enqueue_many(T)
其中T
是长度为N
的张量列表。
让我们将第一个线程中的每个张量标记为T1_1
到T1_N
,将T2_1
标记为T2_N
以表示第二个线程。完成所有操作后(对enqueue_many
的两次调用都已完成),是否会保留订单?即,队列是否包含[T1_1, ..., T1_N, T2_1, ..., T2_N]
或[T2_1, ..., T2_N, T1_1, ..., T1_N]
?或者张量可以以交错方式排列,即[T2_1, T2_2, T1_1, T2_3, T1_2, ...]
?或者,我想,第三种选择是没有任何押韵或理由:张量以任意顺序排列。
答案 0 :(得分:4)
保留每个线程排队的批次中的顺序。另一种方法是FIFOQueue.enqueue_many()
相对于同一队列上的其他排队操作以原子方式*执行。
*但是,如果队列的剩余容量小于要排队的批次的大小,则可以在排队完成之前从批次中出列元素 - 即。您可以将更大的批次入队列入队列的容量,并且enqueue op将阻塞,直到有足够的元素出列为止。