次のように、C++ プログラムで pthread_mutex_t を使用しています。
class Mutex : public noncopyable
{
public:
Mutex()
{
pthread_mutex_init(&m_mutex, NULL);
}
void acquire()
{
pthread_mutex_lock(&m_mutex);
}
void release()
{
pthread_mutex_unlock(&m_mutex);
}
private:
pthread_mutex_t m_mutex;
};
(クラスはコピーできません - http://www.boost.org/doc/libs/1_53_0/boost/noncopyable.hpp )
私が理解していないこと -デストラクタを呼び出さないことはエラーと見なされますか? pthread_mutex_destroy
私が読んだドキュメントには、destroy を呼び出す必要があるとは記載されていません。
pthread_mutex_destroy
実際に何をし、どのような条件下でそれが必要なのか、誰かが知っていますか?
編集
の答えは などにpthread_mutex_destroy
も当てはまりますpthread_cond_destroy
か? pthread_mutex_init
etでない限り、それらはほとんど役に立たない関数のように思えます。アル。メモリを割り当てていますか?(私にとって、ドキュメントはこれについて完全に明確ではありません。)
とにかくdestroyと呼んでも害はないので、質問は主に学術的なものです。
とにかくLinuxでは、destroyはmutexを無効な状態に設定するだけのようです:
int
__pthread_mutex_destroy (mutex)
pthread_mutex_t *mutex;
{
if ((mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0
&& mutex->__data.__nusers != 0)
return EBUSY;
/* Set to an invalid value. */
mutex->__data.__kind = -1;
return 0;
}
(glibc-2.14/nptl/pthread_mutex_destroy.c より)。