Move pthread yield hack into BaseCtx

This commit is contained in:
Sergiusz Bazanski 2018-07-20 13:15:22 +01:00
parent b84a446eef
commit b4b111a053
3 changed files with 14 additions and 10 deletions

View File

@ -20,6 +20,7 @@
#include <algorithm>
#include <assert.h>
#include <condition_variable>
#include <memory>
#include <mutex>
#include <pthread.h>
@ -346,8 +347,9 @@ class BaseCtx : public IdStringDB
{
private:
std::mutex mutex;
bool mutex_owned;
pthread_t mutex_owner;
std::mutex generation_mutex;
public:
std::unordered_map<IdString, std::unique_ptr<NetInfo>> nets;
@ -360,6 +362,7 @@ class BaseCtx : public IdStringDB
{
mutex.lock();
mutex_owner = pthread_self();
}
void unlock(void)
@ -368,6 +371,14 @@ class BaseCtx : public IdStringDB
mutex.unlock();
}
// TODO(q3k): get rid of this hack
void yield(void)
{
for (int i = 0; i < 10; i++) {
pthread_yield();
}
}
Context *getCtx() { return reinterpret_cast<Context *>(this); }
const Context *getCtx() const { return reinterpret_cast<const Context *>(this); }

View File

@ -29,7 +29,6 @@
#include <list>
#include <map>
#include <ostream>
#include <pthread.h>
#include <queue>
#include <set>
#include <stdarg.h>
@ -157,14 +156,7 @@ class SAPlacer
// Main simulated annealing loop
for (int iter = 1;; iter++) {
// TODO(q3k): unwat
pthread_yield();
pthread_yield();
pthread_yield();
pthread_yield();
pthread_yield();
pthread_yield();
pthread_yield();
ctx->yield();
ctx->lock();
n_move = n_accept = 0;
improved = false;

View File

@ -495,6 +495,7 @@ bool router1(Context *ctx)
#endif
return false;
}
ctx->yield();
ctx->lock();
iterCnt++;