c++多线程函数不准引用变量

如题,怎么解决

#include
#include//join detach
#include
using namespace std;
const int N=0;
void add(int *n,int f){
    n+=f;
}
int main(){
    int n=0;
    thread s1(add,n,3);
    thread s2(add,n,4);
    s1.detach();
    s2.detach();
    Sleep(100);
    cout<return 0;
}


该回答内容部分引用GPT,GPT_Pro更好的解决问题
在C++中,多线程函数不准引用变量,是因为多线程函数在执行过程中可能会修改变量的值,而由于多个线程可能会同时访问该变量,因此当一个线程正在修改该变量时,其他线程也可能访问该变量,这样就可能导致数据不一致的问题,从而影响程序的正常执行。

要想解决这个问题,首先要明确一点,就是多线程函数中不应该直接引用变量。如果需要使用该变量,则需要将变量的值拷贝到一个新的局部变量中,然后在函数中使用这个局部变量。这样就可以避免由于多个线程同时访问而导致的数据不一致问题。

此外,为了保证在多线程函数中的数据安全性,还需要使用互斥量来对多线程函数中的代码进行同步,以保证在多个线程同时访问共享数据时不会发生冲突。

例如:

#include<iostream>
#include<thread>
#include<mutex>
using namespace std;
const int Ne = 10; // 共享变量 
int n = Ne; // 共享变量 
// 互斥量 
mutex mu; 
void add(int *n,int f){ 
    mu.lock(); // 加锁 
    (*n) += f; 
    cout << "add:" << *n << endl; 
    mu.unlock(); // 解锁 
} 
int main(){ 
    thread t1(add,&n,3); // 创建新线程,并传入参数 
    thread t2(add,&n,4); // 创建新线程,并传入参数 
    t1.detach(); // 线程分离 
    t2.detach(); // 线程分离 
    Sleep(100); // 等待100ms 
    cout << "final:" << n << endl; // 输出最后的值 
    return 0; 
} 

如果回答有帮助,望采纳。

代码要干啥?add函数第一个参数是指针,但实际调用传递的是int

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^