【发布时间】:2017-05-03 11:13:18
【问题描述】:
我正在努力让它工作,但似乎有些东西我不完全理解。
我在单个文件中有一个多线程应用程序(2 个类和我在其中创建线程和所有内容的真正主程序)。我想分成3个文件。每个类一个(带有它们的标题)和一个主类。
我有几个 mutice 和一个队列,用于在线程之间共享消息并随时锁定和解锁它们。
我想写一个单例类,这样他们都可以共享互斥锁:
标题:
#ifndef COMMONSINGLETON_H
#define COMMONSINGLETON_H
#include <mutex> // std::mutex
#include <queue>
class CommonSingleton{
private:
static std::mutex mutex_w_b;
//static std::mutex mutex_wifi_ok;
//static std::queue <std::string> queue_w_b;
public:
static CommonSingleton& getInstance();
std::mutex GetMutexWB();
//std::mutex GetMutexWiFiOk();
//std::queue <std::string> GetQueueWB();
private:
CommonSingleton() {};
CommonSingleton(CommonSingleton const&);
void operator=(CommonSingleton const&);
};
#endif
还有我的 .cpp 文件:
#include "commonsingleton.h"
static CommonSingleton& CommonSingleton::getInstance(){
static CommonSingleton instance;
return instance;
}
std::mutex CommonSingleton::GetMutexWB(){
return mutex_w_b;
}
/*std::mutex CommonSingleton::GetMutexWiFiOk(){
return mutex_wifi_ok;
}
std::queue <std::string> CommonSingleton::GetQueueWB(){
return queue_w_b;
}*/
在我的主要测试中,我有这个来测试互斥锁:
CommonSingleton::getInstance().GetMutexWB.lock();
但现在我已经发表了评论,只是想弄清楚如何编译。这是我得到的错误:
commonsingleton.cpp:4:54: error: cannot declare member function ‘static
CommonSingleton& CommonSingleton::getInstance()’ to have static linkage [-
fpermissive]
static CommonSingleton& CommonSingleton::getInstance(){
^
commonsingleton.cpp: In member function ‘std::mutex
CommonSingleton::GetMutexWB()’:
commonsingleton.cpp:9:12: error: use of deleted function
‘std::mutex::mutex(const std::mutex&)’
return mutex_w_b;
^
In file included from commonsingleton.h:5:0,
from commonsingleton.cpp:1:
/usr/include/c++/4.8/mutex:128:5: error: declared here
mutex(const mutex&) = delete;
我在这里做错了什么?
【问题讨论】:
-
您不能按值返回
std::mutex,而是按引用返回。 -
有了这两个结果,我几乎可以正常工作了。现在我得到这个错误:/tmp/ccVyBCBk.o: In function
CommonSingleton::GetMutexWB()': commonsingleton.cpp:(.text+0x47): undefined reference toCommonSingleton::mutex_w_b' collect2: error: ld returned 1 exit status
标签: c++ multithreading c++11 mutex