message: that's a lot of fetching and loading mr officer.
diff: @@ -44,19 +44,19 @@ namespace NovelRT::Ecs
  {
  while (true)
  {
  - _threadAvailabilityMap ^= 1ULL << poolId;
  + _threadAvailabilityMap.fetch_xor(1ULL << poolId);
  while (!JobAvailable(poolId))
  {
  if (_shouldShutDown)
  {
  - _threadShutDownStatus ^= 1ULL << poolId;
  + _threadShutDownStatus.fetch_xor(1ULL << poolId);
  return;
  }
  std::this_thread::yield();
  }
  - _threadAvailabilityMap ^= 1ULL << poolId; //TODO: o god y
  + _threadAvailabilityMap.fetch_xor(1ULL << poolId); //this runs AFTER the while check in the main thread
  QueueLockPair& pair = _threadWorkQueues[poolId];
  Atom workItem = pair.systemIds[0];
  @@ -74,8 +74,8 @@ namespace NovelRT::Ecs
  _threadWorkQueues.swap(vec2);
  for (size_t i = 0; i < _maximumThreadCount; i++)
  {
  - _threadShutDownStatus ^= 1ULL << i;
  - _threadAvailabilityMap ^= 1ULL << i;
  + _threadShutDownStatus.fetch_xor(1ULL << i);
  + _threadAvailabilityMap.fetch_xor(1ULL << i);
  _threadCache.emplace_back(std::thread([&, i](){CycleForJob(i);}));
  }
  }
  @@ -147,7 +147,7 @@ namespace NovelRT::Ecs
  }
  }
  - while (_threadAvailabilityMap != 0)
  + while (_threadAvailabilityMap.load() != 0)
  {
  std::this_thread::yield();
  }
  