パブリックファイナルクラスMutexLock
ミューテックスリソースをロックします。出力はロックです。ロックテンソルである限り
が生きている場合、このミューテックスで `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 | |
出力<?> | mutexLock () ミューテックスのロックへの共有ポインターを保持するテンソル。 Tensorが破棄されると、共有ポインターの使用回数が1つ減ります。 |
継承されたメソッド
パブリックメソッド
public Output <Object> asOutput ()
テンソルのシンボリックハンドルを返します。
TensorFlow操作への入力は、別のTensorFlow操作の出力です。このメソッドは、入力の計算を表すシンボリックハンドルを取得するために使用されます。
public static MutexLock create (スコープスコープ、オペランド<?>ミューテックス)
新しいMutexLock操作をラップするクラスを作成するファクトリメソッド。
パラメーター
範囲 | 現在のスコープ |
---|---|
ミューテックス | ロックするミューテックスリソース。 |
戻り値
- MutexLockの新しいインスタンス
public Output <?> mutexLock ()
ミューテックスのロックへの共有ポインターを保持するテンソル。 Tensorが破棄されると、共有ポインターの使用回数が1つ減ります。0に達すると、ロックが解除されます。