我正在尝试在单个类的静态函数之一上实现互斥锁。 但是得到这个错误:
$error:'m_Mutex' declared as reference but not initialized $warning:warning: unused variable 'm_Mutex'
这是我的代码片段。
======== Commondefines.h ==========
/** *@class LockBlock *This class is used to provide Mutex Lock on thread. */ class LockBlock { public: LockBlock(pthread_mutex_t *mutex) { lockMutex = mutex; pthread_mutex_lock(lockMutex); }; ~LockBlock() { pthread_mutex_unlock(lockMutex); lockMutex = NULL; } private: pthread_mutex_t *lockMutex; };
======== MutexImplenation.h ======
C ++:std :: async和std :: mutex在Linux上导致死锁,但在Windows上运行?
如何使线程同步,而不使用互斥,semorphore,spinLock和futex?
只有一个线程可能会导致死锁或冻结在Linux上的程序?
需要帮助来debugging互斥锁死锁
pthread互斥量的开销?
#include "CommonDefines.h" class MutexImplementation { private: static pthread_mutex_t m_Mutex ; public: static void commonFunction(); };
==== MutexImplementation.cpp ==========
// Initialize static member of class. pthread_mutex_t MutexImplentation::m_Mutex = PTHREAD_MUTEX_INITIALIZER; void commonFunction() { LockBlock(&m_Mutex); // Here I am getting this error. }
任何帮助将不胜感激。 谢谢,尤维
在函数上进行互斥
与进程使用互斥/信号量
互斥与Windows中的事件
如何强制我的应用程序只能打开一个exe文件? qt,linux
这实际上是“最令人尴尬的解析”问题的一个变种。 除了作为m_Mutex的成员之外,你还没有定义MutexImplementation ,所以在MutexImplementation之外,它的名字是MutexImplementation::m_Mutex (因为它是私有的,所以你不能合法地访问它)。 当你写:
LockBlock (&m_Mutex);
,编译器找不到m_Mutex ,所以假设你正在定义一个局部变量。 括号是合法的,但是没有效果,声明也是一样的:
LockBlock& m_Mutex;
对LockBlock的引用和引用只能在被初始化时才能被定义。
如果你想要一个局部变量,你必须给它一个名字。 如果你想把它初始化为m_Mutex ,你必须公开m_Mutex ,并指定类名称:
LockBlock& localRefToMutex( &MutexImplementation::m_Mutex );
例如。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。