pthread_mutex_lock error
pthread_mutex_lock error
#include "MutexCondition.h"
bool MutexCondition::init(){
printf("MutexCondition::init calledn");
pthread_mutex_init(&m_mut, NULL);
pthread_cond_init(&m_con, NULL);
return true;
}
bool MutexCondition::destroy(){
pthread_mutex_destroy(&m_mut);
pthread_cond_destroy(&m_con);
return true;
}
bool MutexCondition::lock(){
pthread_mutex_lock(&m_mut);
return true;
}
bool MutexCondition::unLock(){
pthread_mutex_unlock(&m_mut);
return true;
}
bool MutexCondition::wait(){
pthread_cond_wait(&m_con, &m_mut);
return true;
}
bool MutexCondition::signal(){
pthread_cond_signal(&m_con);
return true;
}
我正在进行网络编程,我有这个和Sound类扩展了MutexCondition
#ifndef SOUND_H_
#define SOUND_H_
#include <list>
#include "SoundMetaData.h"
#include "SoundSignature.h"
#include "../MutexCondition.h"
using namespace std;
class Sound : public MutexCondition{
private:
SoundMetaData *m_metaData;
list<SoundSignature*> m_soundSignatureList;
public:
Sound(SoundMetaData *metaData);
virtual ~Sound();
SoundMetaData* getSoundMetaData();
list<SoundSignature*> getSoundSignatureList();
bool addApplication(string &application);
bool removeApplication(string &application);
void addSoundSignature(SoundSignature* signature);
};
#endif /* SOUND_H_ */
如果我在gdb上运行服务器。它在函数getssoundsignaturelist的pthread_mutex_lock()上爆发。
list<SoundSignature *> Sound::getSoundSignatureList(){
lock();
list<SoundSignature*> list(m_soundSignatureList);
unLock();
return list;
}
我有一个叫做Engine的类,5个不同的线程根据它收到的包类型创建Engine类。Engine类中的一个函数调用getSoundSignatureList类。还有其他地方可以调用Engine类。
我不明白为什么它会在pthred_mutex_lock上爆炸
如何解决这个问题?谢谢你的帮助
EDIT .h file
#ifndef MUTEXCONDITION_H_
#define MUTEXCONDITION_H_
#include <pthread.h>
#include <stdio.h>
class MutexCondition {
private:
bool init();
bool destroy();
protected:
pthread_mutex_t m_mut;
pthread_cond_t m_con;
public:
MutexCondition(){
init();
}
virtual ~MutexCondition(){
destroy();
}
bool lock();
bool unLock();
bool wait();
bool signal();
};
#endif /* MUTEXCONDITION_H_ */
我想知道您的互斥对象实例是否由于复制或赋值操作而被丢弃(您甚至可能没有意识到)。互斥锁是不可复制的——您应该通过将copy-ctor和operator=()设置为私有且未实现(或类似的技术)来确保您为互斥锁所拥有的包装器类不能被复制:
#ifndef MUTEXCONDITION_H_
#define MUTEXCONDITION_H_
#include <pthread.h>
#include <stdio.h>
class MutexCondition {
private:
bool init();
bool destroy();
// idiom to prevent copying: don't implement these
MutexCondition( MutexCondition const&);
void operator=( MutexCondition const&);
protected:
pthread_mutex_t m_mut;
pthread_cond_t m_con;
public:
MutexCondition(){
init();
}
virtual ~MutexCondition(){
destroy();
}
bool lock();
bool unLock();
bool wait();
bool signal();
};
#endif /* MUTEXCONDITION_H_ */
另一个注意事项:在我看来,这个类的私有继承可能比公共继承更合适。
相关文章:
- "error: no matching function for call to"构造函数错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- C++错误:"error: int aaa::bbb is protected within this context"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- C++ "error: invalid use of void expression"
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 尝试构建"lock-free"数据结构C++
- 从不同目录执行时"symbol lookup error:",否则从构建目录执行时按预期工作
- 对象声明中的模板"error: expected expression"
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- OpenCV 3.4.1 error readNetFromTensorflow 无法在 cv::d nn::ReadProtoFromBinaryFile 中打开 .pb
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 为什么我会"error: expected expression"?
- 为什么 c++11 std::lock 和 std::scoped_lock 至少需要 2 个参数?
- CMake Error at modules/videoio/cmake/detect_ffmpeg.cmake:16