所有互斥體實現最終是否會調用相同的基本系統/硬件調用 - 這意味着它們可以互換?互斥體實現是否可以互換(獨立於線程實現)
具體來說,如果我使用的是__gnu_parallel
算法(使用openmp
),我想使它們被稱爲線程安全類,我可以使用boost::mutex
來鎖定?或者我必須寫我自己的互斥體,如一個描述here
//An openmp mutex. Can this be replaced with boost::mutex?
class Mutex {
public:
Mutex() { omp_init_lock(&_mutex); }
~Mutex() { omp_destroy_lock(&_mutex); }
void lock() { omp_set_lock(&_mutex); }
void unlock() { omp_unset_lock(&_mutex); }
private:
omp_lock_t _mutex;
};
編輯,以上OpenMP的互斥的鏈接似乎被打破,有興趣的人士,與此互斥去鎖是沿着這些行
class Lock
{
public:
Lock(Mutex& mutex)
: m_mutex(mutex),
m_release(false)
{
m_mutex.lock();
}
~Lock()
{
if (!m_release)
m_mutex.unlock();
}
bool operator() const
{
return !m_release;
}
void release()
{
if (!m_release)
{
m_release = true;
m_mutex.unlock();
}
}
private:
Mutex& m_mutex;
bool m_release;
};
另請參閱我的答案在這裏: http://stackoverflow.com/questions/15367988/is-it-safe-to-mix-pthread-h-and-c11-standard-library-threading-features/37065051# 37065051只要您每次訪問某組數據時都使用該方法,您就可以使用任何方法。 – 2016-05-07 20:53:59