summaryrefslogtreecommitdiffstats
path: root/xmrstak/backend/cpu
diff options
context:
space:
mode:
authorfireice-uk <fireice-uk@users.noreply.github.com>2017-10-12 12:52:50 +0100
committerfireice-uk <fireice-uk@users.noreply.github.com>2017-10-12 12:52:50 +0100
commit8bbdd45b9e63f6622ee2eac8f9dd0cd881a78aa4 (patch)
tree405f14b961e249a755d1682477441047f54a3f8b /xmrstak/backend/cpu
parent73482f3065af13de1140308f65371d059df7decf (diff)
downloadxmr-stak-8bbdd45b9e63f6622ee2eac8f9dd0cd881a78aa4.zip
xmr-stak-8bbdd45b9e63f6622ee2eac8f9dd0cd881a78aa4.tar.gz
Affinity - fix C
Diffstat (limited to 'xmrstak/backend/cpu')
-rw-r--r--xmrstak/backend/cpu/minethd.cpp9
-rw-r--r--xmrstak/backend/cpu/minethd.hpp4
2 files changed, 8 insertions, 5 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;
diff --git a/xmrstak/backend/cpu/minethd.hpp b/xmrstak/backend/cpu/minethd.hpp
index ad75d07..c023fcb 100644
--- a/xmrstak/backend/cpu/minethd.hpp
+++ b/xmrstak/backend/cpu/minethd.hpp
@@ -8,7 +8,7 @@
#include <thread>
#include <vector>
#include <atomic>
-#include <mutex>
+#include <future>
namespace xmrstak
{
@@ -46,7 +46,7 @@ private:
miner_work oWork;
void pin_thd_affinity();
- std::mutex work_thd_mtx;
+ std::promise<void> order_fix;
std::thread oWorkThd;
int64_t affinity;
OpenPOWER on IntegriCloud