diff options
Diffstat (limited to 'xmrstak/backend/cpu/minethd.cpp')
-rw-r--r-- | xmrstak/backend/cpu/minethd.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/xmrstak/backend/cpu/minethd.cpp b/xmrstak/backend/cpu/minethd.cpp index 51091bf..3059891 100644 --- a/xmrstak/backend/cpu/minethd.cpp +++ b/xmrstak/backend/cpu/minethd.cpp @@ -101,12 +101,15 @@ minethd::minethd(miner_work& pWork, size_t iNo, bool double_work, bool no_prefet bNoPrefetch = no_prefetch; this->affinity = affinity; - std::lock_guard<std::mutex> lock(work_thd_mtx); + std::future<void> order_guard = order_fix.get_future(); + if(double_work) oWorkThd = std::thread(&minethd::double_work_main, this); else oWorkThd = std::thread(&minethd::work_main, this); + order_guard.wait(); + if(!thd_setaffinity(oWorkThd.native_handle(), affinity)) printer::inst()->print_msg(L1, "WARNING setting affinity failed."); } @@ -305,8 +308,6 @@ minethd::cn_hash_fun minethd::func_selector(bool bHaveAes, bool bNoPrefetch) void minethd::pin_thd_affinity() { - std::lock_guard<std::mutex> lock(work_thd_mtx); - // pin memory to NUMA node bindMemoryToNUMANode(affinity); } @@ -316,6 +317,8 @@ void minethd::work_main() if(affinity >= 0) //-1 means no affinity pin_thd_affinity(); + order_fix.set_value(); + cn_hash_fun hash_fun; cryptonight_ctx* ctx; uint64_t iCount = 0; |