Tensorflow 的 QueueBase.enqueue_many 是否保持跨线程的顺序?

Does Tensorflow's QueueBase.enqueue_many preserve order across threads?

假设两个线程同时尝试将 N 个张量放入 FIFOQueue 的实例中。即,他们正在调用

queue_instance.enqueue_many(T) 其中 T 是长度为 N 的张量列表。

让我们将第一个线程中的每个张量标记为 T1_1T1_N,并将第二个线程中的每个张量标记为 T2_1T2_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, ...]?或者,我想,第三种选择是没有任何韵律或理由:张量以任意顺序排队。

保留每个线程排队的批次中的顺序。另一种表达方式是 FIFOQueue.enqueue_many() 相对于同一队列上的其他入队操作以原子方式*执行。


* 但是,如果队列的剩余容量小于正在排队的批次的大小,则可以在排队完成之前从批次中 出队 元素 — IE。您可以将比队列容量 的批次入队,并且入队操作将阻塞,直到有足够的元素出队。