注ですこれは、古い答えです。
std::lock_guard
std::mutex
とstd :: unique_lockのような他のオプションは、後押し:: unique_lockの
:C++ 11は、独立したより多くのプラットフォームをしているより良いヘルパーが含まれています
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
}
}
あなたは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;
};
: コピー/割り当ては、すでにpthreadsのためにあるため、参照フィールドの
EDITを禁止されています。あなたの_ref.Acquire()はpthread_mutex_lock(_ref)になりますか? – cateof
Mmm。あなたのスレッドライブラリに実装する部分には、そのようにマークされていました。とにかく、pthread_mutex_tのクイック実装を参考に追加しました。 – sehe
あなたはOSの詳細を指定する前にあなたの答えがありました:-) – cateof