【发布时间】:2014-08-27 08:16:22
【问题描述】:
我正在学习如何在标准 C++ 中使用std::thread,但我无法用std::mutex 解决一个问题。
我正在运行 2 个线程,它们具有在 CMD 中显示消息的简单函数。我想使用std::mutex,这样一个线程将等到另一个威胁停止使用缓冲区。
当我使用函数时,一切正常,但使用函子时我遇到了问题:
错误 C2280: 'std::mutex::mutex(const std::mutex &)' : 试图引用已删除的函数
我做错了什么?
#include <iostream>
#include <thread>
#include <mutex>
class thread_guard
{
private:
std::thread m_thread;
public:
thread_guard(std::thread t)
{
m_thread = std::move(t);
if (!m_thread.joinable())
std::cout << "Brak watku!!!" << std::endl;
}
~thread_guard()
{
m_thread.join();
}
};
class func
{
private:
std::mutex mut;
public:
void operator()()
{
for (int i = 0; i < 11000; i++)
{
std::lock_guard<std::mutex> guard(mut);
std::cout << "watek dziala 1" << std::endl;
}
}
};
class func2
{
private:
std::mutex mut;
public:
void operator()()
{
for (int i = 0; i < 11000; i++)
{
std::lock_guard<std::mutex> guard(mut);
std::cout << "watek dziala 2" << std::endl;
}
}
};
std::mutex mut2;
void fun()
{
for (int i = 0; i < 11000; i++)
{
std::lock_guard<std::mutex> guard(mut2);
std::cout << "watek dziala 1" << std::endl;
}
}
void fun2()
{
for (int i = 0; i < 11000; i++)
{
std::lock_guard<std::mutex> guard(mut2);
std::cout << "watek dziala 2" << std::endl;
}
}
int main(void)
{
thread_guard t1( (std::thread( func() )) );
thread_guard t2( (std::thread(func2() )) );
//thread_guard t1((std::thread(fun)));
//thread_guard t2((std::thread(fun2)));
}
【问题讨论】:
-
该错误表明您正在尝试复制互斥体(调用复制构造函数),这显然是不允许的。
-
但我对函数做同样的事情,但在课堂上。那么问题出在哪里??
标签: c++ multithreading c++11