Every thread has two pointers. Pointer
*o points to a location in memory where the current operation is. Pointer
*i points to a location of the data thats being operated on. Pointer
*i in the beginning starts in a temporary location where it cant interfere with the code.
TODO: needs a way to halt
o and Move
*i according to the table and move
|Wait for a broatcast.
Set incoming broadcast to
|Create a concurrent thread and set its
o to this
TODO: clean this up