Thread-safety for `tensorflow::Tensor`
I'd like to help work on this issue. Hi @p3achyjr ,

Please find the source code for TensorSlice below for reference.

https://github.com/tensorflow/tensorflow/blob/877805a728950a5527ed40ea82ee15b17449e49c/tensorflow/core/framework/tensor.cc#L1023-L1043 It looks ok to me at first glance? It looks like we are reading/creating new objects. Would like someone to confirm though as I haven't dug into it further. Short answer to your question, YES Tensors are thread safe.

All tensors are immutable like Python numbers and strings: you can never update the contents of a tensor, only create a new one.
 Thank you! Are you satisfied with the resolution of your issue?
<a href="https://docs.google.com/forms/d/e/1FAIpQLSfaP12TRhd9xSxjXZjcZFNXPGk4kc1-qMdv3gc6bEP90vY1ew/viewform?entry.85265664=Yes&entry.2137816233=https://github.com/tensorflow/tensorflow/issues/60120">Yes</a>
<a href="https://docs.google.com/forms/d/e/1FAIpQLSfaP12TRhd9xSxjXZjcZFNXPGk4kc1-qMdv3gc6bEP90vY1ew/viewform?entry.85265664=No&entry.2137816233=https://github.com/tensorflow/tensorflow/issues/60120">No</a>

<details><summary>Click to expand!</summary> 
 
 ### Issue Type

Support

### Have you reproduced the bug with TF nightly?

No

### Source

source

### Tensorflow Version

2.11.0

### Custom Code

Yes

### OS Platform and Distribution

Debian GNU/Linux 10

### Mobile device

_No response_

### Python version

3.9

### Bazel version

6.1.0

### GCC/Compiler version

LLVM 12

### CUDA/cuDNN version

11.6

### GPU model and memory

T4

### Current Behaviour?

```shell
Are there any methods on `tensorflow::Tensor` objects that are thread-safe? Specifically, any of

SubSlice()
flat(), unaligned_flat(), shaped().
```


### Standalone code to reproduce the issue

```shell
std::vector<Tensor> output;
Mutex mu;
bool ready = false;

void Eval() {
  output = {Tensor(DataType::DT_HALF, {2, 16}); // one entry per thread
  nn_evaluator_.Infer(<some_input>, <some_names>, &output);

  mu.Lock();
  ready = true;
  mu.Unlock();
}

void ReadResult(int thread_id) {
  mu.Lock();
  mu.Await(Condition(&ready));
  mu.Unlock();

  // can we read tensor result now?
  auto res = output[0].SubSlice(thread_id).unaligned_flat<Eigen::half>();
  return res(0);
}
```


### Relevant log output

_No response_</details>