seh*_*ehe 16
注意这是一个老答案.C++ 11包含更多独立于平台的帮助程序:
- 的std :: lock_guard
- std :: mutex,std :: timed_mutex,std :: recursive_mutex,std :: recursive_timed_mutex
以及其他选项,如std :: unique_lock,boost :: unique_lock
任何RAII教程都可以.
这是要点:(也在http://ideone.com/kkB86上)
// stub mutex_t: implement this for your operating system
struct mutex_t
{
void Acquire() {}
void Release() {}
};
struct LockGuard
{
LockGuard(mutex_t& mutex) : _ref(mutex)
{
_ref.Acquire(); // TODO operating system specific
}
~LockGuard()
{
_ref.Release(); // TODO operating system specific
}
private:
LockGuard(const LockGuard&); // or use c++0x ` = delete`
mutex_t& _ref;
};
int main()
{
mutex_t mtx;
{
LockGuard lock(mtx);
// LockGuard copy(lock); // ERROR: constructor private
// lock = LockGuard(mtx);// ERROR: no default assignment operator
}
}
Run Code Online (Sandbox Code Playgroud)
当然你可以使它成为通用的mutex_t,你可以防止子类化.由于参考字段,已禁止复制/分配
编辑 pthreads:
struct mutex_t
{
public:
mutex_t(pthread_mutex_t &lock) : m_mutex(lock) {}
void Acquire() { pthread_mutex_lock(&m_mutex); }
void Release() { pthread_mutex_unlock(&m_mutex); }
private:
pthread_mutex_t& m_mutex;
};
Run Code Online (Sandbox Code Playgroud)