【发布时间】:2011-08-25 20:23:56
【问题描述】:
是否所有互斥锁实现最终都调用相同的基本系统/硬件调用——这意味着它们可以互换?
具体来说,如果我使用__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;
};
【问题讨论】:
-
这里也可以看我的回答:stackoverflow.com/questions/15367988/…你可以使用任何方法,只要你每次访问某组数据时都使用那个方法。
标签: c++ mutex openmp boost-thread