title: shared_name for TensorFlow operations
body: <p>Many TensorFlow operations have <code>shared_name</code> as an optional argument.
  For example <code>make_initializable_iterator</code> (<a href="https://stackoverflow.com/questions/55612210/how-to-use-shared-name-on-initializable-iterator">related question</a>), most (all?) TF resources (variables, <code>TensorArray</code>, ...), <code>ConditionalAccumulator</code>, <code>_MutableDenseHashTable</code>, <code>FIFOQueue</code> (<a href="https://github.com/tensorflow/tensorflow/issues/17050" rel="nofollow noreferrer">related issue</a>), etc.</p>
  
  <p>In the documentation, it often says sth like this:</p>
  
  <blockquote>
    <p>shared_name: If non-empty, this table will be shared under the given name across multiple sessions.</p>
  </blockquote>
  
  <p>But how does that work? How do I actually share that resource / tensor / op (or what actually exactly?) across multiple sessions?</p>
  
  <p>Would that be multiple sessions in the same process? Or multiple sessions across multiple processes/machines (remotely)?</p>
  
  <p>Would it share the same memory (only possible if within the same process, or at least same host, by using shared memory)? Or how else would it synchronize the state?</p>
  
  <p>And is <code>Graph.container</code> related to that? From that doc:</p>
  
  <blockquote>
    <p>Stateful operations, such as variables and queues, can maintain their states on devices so that they can be shared by multiple processes.</p>
  </blockquote>
  
  <p>How does the sharing across multiple processes work?</p>
  
  <p>And is <a href="https://www.tensorflow.org/api_docs/python/tf/distribute" rel="nofollow noreferrer">distributed TensorFlow (<code>tf.distribute</code>)</a> related to that? How?</p>
  
  <p>Or <code>remote_call</code>? (See also <a href="https://stackoverflow.com/questions/61988958/tf-python-remote-call-vs-tf-device-when-do-you-need-remote-call">this question</a>.)</p>