Make round-robin task enqueue index thread safe

Addresses TSAN error in Chromium viz_unittests and cc_unittests.

Bug: b/139010488
Change-Id: I1a53487c4787170c38898cca47bf76145ebdf6bd
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35608
Presubmit-Ready: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Yarn/Scheduler.cpp b/src/Yarn/Scheduler.cpp
index 25b432e..827aa90 100644
--- a/src/Yarn/Scheduler.cpp
+++ b/src/Yarn/Scheduler.cpp
@@ -99,6 +99,7 @@
 }
 
 Scheduler::Scheduler()
+    : nextEnqueueIndex(0)
 {
     for (size_t i = 0; i < spinningWorkers.size(); i++)
     {
diff --git a/src/Yarn/Scheduler.hpp b/src/Yarn/Scheduler.hpp
index 9649e02..992dade 100644
--- a/src/Yarn/Scheduler.hpp
+++ b/src/Yarn/Scheduler.hpp
@@ -294,7 +294,7 @@
 
     // TODO: Make this lot thread-safe so setWorkerThreadCount() can be called
     // during execution of tasks.
-    unsigned int nextEnqueueIndex = 0;
+    std::atomic<unsigned int> nextEnqueueIndex;
     unsigned int numWorkerThreads = 0;
     std::array<Worker*, MaxWorkerThreads> workerThreads;