diff --git a/src/backend/cpu/CpuBackend.cpp b/src/backend/cpu/CpuBackend.cpp
index 529b14e23..ead131a2e 100644
--- a/src/backend/cpu/CpuBackend.cpp
+++ b/src/backend/cpu/CpuBackend.cpp
@@ -180,11 +180,11 @@ public:
         }
     #   endif
 
-        mutex.lock();
+        {
+            std::lock_guard<std::mutex> lock(mutex);
 
-        pages += status.hugePages();
-
-        mutex.unlock();
+            pages += status.hugePages();
+        }
 
         rapidjson::Value hugepages;
 
@@ -380,14 +380,14 @@ void xmrig::CpuBackend::setJob(const Job &job)
 
 void xmrig::CpuBackend::start(IWorker *worker, bool ready)
 {
-    mutex.lock();
+    {
+        std::lock_guard<std::mutex> lock(mutex);
 
-    if (d_ptr->status.started(worker, ready)) {
-        d_ptr->status.print();
+        if (d_ptr->status.started(worker, ready)) {
+            d_ptr->status.print();
+        }
     }
 
-    mutex.unlock();
-
     if (ready) {
         worker->start();
     }
diff --git a/src/backend/cuda/CudaBackend.cpp b/src/backend/cuda/CudaBackend.cpp
index 621563e11..aef564c4f 100644
--- a/src/backend/cuda/CudaBackend.cpp
+++ b/src/backend/cuda/CudaBackend.cpp
@@ -465,16 +465,17 @@ void xmrig::CudaBackend::setJob(const Job &job)
 
 void xmrig::CudaBackend::start(IWorker *worker, bool ready)
 {
-    mutex.lock();
+    {
+        std::lock_guard<std::mutex> lock(mutex);
 
-    if (d_ptr->status.started(ready)) {
-        d_ptr->status.print();
+        if (d_ptr->status.started(ready)) {
+            d_ptr->status.print();
+
+            CudaWorker::ready = true;
+        }
 
-        CudaWorker::ready = true;
     }
 
-    mutex.unlock();
-
     if (ready) {
         worker->start();
     }
diff --git a/src/backend/opencl/OclBackend.cpp b/src/backend/opencl/OclBackend.cpp
index 820c63d4c..99fe0d590 100644
--- a/src/backend/opencl/OclBackend.cpp
+++ b/src/backend/opencl/OclBackend.cpp
@@ -447,16 +447,16 @@ void xmrig::OclBackend::setJob(const Job &job)
 
 void xmrig::OclBackend::start(IWorker *worker, bool ready)
 {
-    mutex.lock();
+    {
+        std::lock_guard<std::mutex> lock(mutex);
 
-    if (d_ptr->status.started(ready)) {
-        d_ptr->status.print();
+        if (d_ptr->status.started(ready)) {
+            d_ptr->status.print();
 
-        OclWorker::ready = true;
+            OclWorker::ready = true;
+        }
     }
 
-    mutex.unlock();
-
     if (ready) {
         worker->start();
     }
diff --git a/src/core/Miner.cpp b/src/core/Miner.cpp
index 1f99b943f..176473426 100644
--- a/src/core/Miner.cpp
+++ b/src/core/Miner.cpp
@@ -569,7 +569,14 @@ void xmrig::Miner::setJob(const Job &job, bool donate)
 
     d_ptr->algorithm = job.algorithm();
 
-    mutex.lock();
+#   ifdef XMRIG_ALGO_RANDOMX
+    bool ready = false;
+#   else
+    constexpr const bool ready = true;
+#   endif
+
+    {
+    std::lock_guard<std::mutex> lock(mutex);
 
     const uint8_t index = donate ? 1 : 0;
 
@@ -588,14 +595,12 @@ void xmrig::Miner::setJob(const Job &job, bool donate)
     }
 
 #   ifdef XMRIG_ALGO_RANDOMX
-    const bool ready = d_ptr->initRX();
+    ready = d_ptr->initRX();
 
     // Always reset nonce on RandomX dataset change
     if (!ready) {
         d_ptr->reset = true;
     }
-#   else
-    constexpr const bool ready = true;
 #   endif
 
 #   ifdef XMRIG_ALGO_GHOSTRIDER
@@ -604,7 +609,7 @@ void xmrig::Miner::setJob(const Job &job, bool donate)
     }
 #   endif
 
-    mutex.unlock();
+    }
 
     d_ptr->active = true;
     d_ptr->m_taskbar.setActive(true);