C++ 将原子变量传递给函数
我尝试将原子变量传递给函数,如下所示:C++ 将原子变量传递给函数,c++,c++11,atomic,C++,C++11,Atomic,我尝试将原子变量传递给函数,如下所示: // function factor receives an atomic variable void factor(std::atomic<int> ThreadsCounter) { ......... } // main starts here int main() { // Atomic variable declaration std::atomic<int> ThreadsCounter(0)
// function factor receives an atomic variable
void factor(std::atomic<int> ThreadsCounter)
{
.........
}
// main starts here
int main()
{
// Atomic variable declaration
std::atomic<int> ThreadsCounter(0);
// passing atomic variable to the function factor through a thread
Threadlist[0] = std::thread (factor, std::ref(ThreadsCounter));
Threadlist[0].join();
return 0;
}
//函数因子接收一个原子变量
空隙率(标准::原子螺纹中心)
{
.........
}
//主要从这里开始
int main()
{
//原子变量声明
标准::原子线程中心(0);
//通过线程将原子变量传递给函数因子
Threadlist[0]=std::thread(因子,std::ref(threadsconter));
线程列表[0]。连接();
返回0;
}
运行上述代码时,我遇到以下错误:
错误2错误C2280:'std::atomic::atomic(const std::atomic&'):尝试引用已删除的函数c:\program files(x86)\microsoft visual studio 12.0\vc\include\functional 1149 1 klu\u factor
有人知道怎么解决这个问题吗?非常感谢您的帮助。函数
factor
按值获取它的threadsconter
参数,std::atomic
不可复制构造
即使你绑定了对线程函数的引用,它也在试图创建一个副本来传递函数。@Collin Dauphinee,我只是试图将函数修改为“void factor(std::atomic&threadsconter)”,但我得到了与我刚刚编译并运行测试用例相同的错误,请仔细检查你是否确实构建了更改。是的,我的错,我修改了源文件,但没有修改头文件。它现在可以工作了,谢谢@Collin Dauphinee,增加函数中原子变量的最佳方法是什么。对不起,我对原子变量还是新手