ミューテックスリソースをロックします。出力はロックです。ロックテンソルがある限り
が生きている場合、このミューテックスで `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` がクリティカル セクションで実行されている間、このクリティカル セクションを使用する他の関数は実行できません。多くの場合、同じグラフの 2 つの実行が並行して `fn` を実行したいというユースケースが考えられます。そして、一度にそのうちの 1 つだけが実行されるようにしたいと考えています。これは、「fn」が一度に 1 つ以上の変数を変更する場合に特に重要です。
これは、2 つの別個の関数がリソースを共有する必要があるが、確実に排他的に使用したい場合にも便利です。
パブリックメソッド
出力<オブジェクト> | asOutput () テンソルのシンボリック ハンドルを返します。 |
静的MutexLock | |
出力<?> | ミューテックスロック() ミューテックス上のロックへの共有ポインタを保持するテンソル。 Tensor が破棄されると、共有ポインターの使用カウントが 1 減ります。 |
継承されたメソッド
パブリックメソッド
public Output <オブジェクト> asOutput ()
テンソルのシンボリック ハンドルを返します。
TensorFlow オペレーションへの入力は、別の TensorFlow オペレーションの出力です。このメソッドは、入力の計算を表すシンボリック ハンドルを取得するために使用されます。
public static MutexLock create (スコープscope、オペランド<?>ミューテックス)
新しい MutexLock オペレーションをラップするクラスを作成するファクトリ メソッド。
パラメータ
範囲 | 現在のスコープ |
---|---|
ミューテックス | ロックするミューテックス リソース。 |
返品
- MutexLock の新しいインスタンス
public Output <?> mutexLock ()
ミューテックス上のロックへの共有ポインタを保持するテンソル。 Tensor が破棄されると、共有ポインターの使用カウントが 1 減ります。0 に達すると、ロックが解放されます。