tf.raw_ops.MutexLock
Блокирует ресурс мьютекса. Выход — это блокировка. Пока тензор блокировки
tf.raw_ops.MutexLock(
mutex, name=None
)
жив, любой другой запрос на использование MutexLock с этим мьютексом будет ожидать.
Это особенно полезно для создания критической секции в сочетании с MutexLockIdentity:
mutex = mutex_v2(
shared_name=handle_name, container=container, name=name)
def execute_in_critical_section(fn, *args, **kwargs):
lock = gen_resource_variable_ops.mutex_lock(mutex)
with ops.control_dependencies([lock]):
r = fn(*args, **kwargs)
with ops.control_dependencies(nest.flatten(r)):
with ops.colocate_with(mutex):
ensure_lock_exists = mutex_lock_identity(lock)
# Make sure that if any element of r is accessed, all of
# them are executed together.
r = nest.map_structure(tf.identity, r)
with ops.control_dependencies([ensure_lock_exists]):
return nest.map_structure(tf.identity, r)
Пока fn выполняется в критической секции, никакие другие функции, которые хотят использовать эту критическую секцию, не могут выполняться.
Часто ситуация заключается в том, что два исполнения одной и той же графы параллельно хотят выполнить fn; и мы хотим гарантировать, что только одно из них выполняется за раз. Это особенно важно, если fn изменяет один или несколько переменных за раз.
Это также полезно, если две отдельные функции должны совместно использовать ресурс, но мы хотим гарантировать исключительность использования.
| Аргументы | |
|---|---|
mutex | Объект Tensor типа resource. Ресурс мьютекса для блокировки. |
name | Имя операции (необязательно). |
| Возвращаемые значения | |
|---|---|
Объект Tensor типа variant. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/raw_ops/MutexLock