【发布时间】:2015-12-03 23:41:04
【问题描述】:
当线程访问共享全局变量时,我无法想出一种算法来确保互斥。我正在尝试编写一个可以使用全局变量的线程函数,而不是将其切换为局部变量。
到目前为止我有这个代码:
int sumGlobal = 0;
void sumArray(int** array, int size){
for (int i=0; i<size; i++){
for (int j=0; j<size; j++){
sumGlobal += array[i][j];
}
}
}
int main(){
int size = 4000;
int numThreads = 4;
int** a2DArray = new int*[size];
for (int i=0; i<size; i++){
a2DArray[i] = new int[size];
for (int j=0; j<dim; j++){
a2DArray[i][j] = genRandNum(0,100);
}
}
std::vector<std::future<void>> thread_Pool;
for (int i = 0; i < numThreads; ++i) {
thread_Pool.push_back( std::async(launch::async,
sumArray, a2DArray, size));
}
}
我不确定如何保证sumGlobal 不会被每个线程重写。我想正确更新它,以便每个线程在完成时将其值添加到全局变量中。我只是想学习线程,而不是局限于非空函数。
【问题讨论】:
-
您有两个选择:1)使用锁进行互斥。 2)使用原子类型和操作来避免对锁的需要。
标签: c++ multithreading