C++ 创建线程在数组上执行计算-似乎无法正确访问数组
好的,我将一个参数传递给一个线程,我用它来告诉它在数组中的位置。我已经消除了之前抛出的分段错误,但它仍然不能像我希望的那样工作。传递到C++ 创建线程在数组上执行计算-似乎无法正确访问数组,c++,multithreading,pthreads,argument-passing,C++,Multithreading,Pthreads,Argument Passing,好的,我将一个参数传递给一个线程,我用它来告诉它在数组中的位置。我已经消除了之前抛出的分段错误,但它仍然不能像我希望的那样工作。传递到指针中的int似乎在某个地方发生了变化。这就抛出了整个数组,我得到了真正的随机数。如果有任何可能的方式,任何人都可以帮助我排序这将是非常感谢。我希望代码所要做的就是通读一个2d数组,选择一个随机数(1、2或5)来决定一个线程将处理数组中的多少行,然后创建多个线程来处理数组中的行。这可能是一个错误的方法,但我不知道怎么做。这应该是课堂作业,以帮助我理解线程等,但到目
指针中的int似乎在某个地方发生了变化。这就抛出了整个数组,我得到了真正的随机数。如果有任何可能的方式,任何人都可以帮助我排序这将是非常感谢。我希望代码所要做的就是通读一个2d数组,选择一个随机数(1、2或5)来决定一个线程将处理数组中的多少行,然后创建多个线程来处理数组中的行。这可能是一个错误的方法,但我不知道怎么做。这应该是课堂作业,以帮助我理解线程等,但到目前为止,我认为这只是让我更困惑!如果可以的话,请帮忙
int threadArray[10][10];
int arrayVar[10][2];
using namespace std;
void *calc(void *pointer){
int *point, pointerA;
point = (int *) pointer;
pointerA = *point;
int startPoint = arrayVar[pointerA][0];
int endPoint = arrayVar[pointerA][1];
int newArray[10][10];
int calculated;
for (int i = startPoint ; i < endPoint; i++){
for (int j = 0; j < 10; j++){
calculated = (threadArray[i][j] * 2 + 4) * 2 + 4;
newArray[i][j] = calculated;
}
}
for (int i = startPoint; i < endPoint; i++){
for (int j = 0; j < 10; j++){
cout << newArray[i][j] << " ";
}
cout << endl;
}
return 0;
}
int main(){
int rc;
int start = 0;
int end;
ifstream numFile;
numFile.open("numbers.txt");
if (numFile.is_open()){
for (int row = 0; row < 10; row++){
std::string line;
std::getline(numFile, line);
std::stringstream iss(line);
for (int col = 0; col < 10; col++){
std::string num;
std::getline(iss, num, ' ');
std::stringstream converter(num);
converter >> threadArray[row][col];
}
}
cout << "Original 2D Array" << endl << endl;
for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
cout << threadArray[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
srand (time(NULL));
const int rowArray[3] = {1, 2, 5};
int arrayIndex = rand() % 3;
int noOfRows = (rowArray[arrayIndex]);
end = noOfRows;
int noOfThreads = 10 / noOfRows;
pthread_t threads[noOfThreads];
arrayVar[noOfThreads][2];
start = 0;
end = noOfRows;
for (int a = 0; a < noOfThreads; a++){
arrayVar[a][0] = start;
arrayVar[a][1] = end;
start = start + noOfRows + 1;
end = end + noOfRows + 1;
}
int *pointer = 0;
cout << "2D Array Altered" << endl << endl;
for (int t = 0; t < noOfThreads; t++){
pointer = (int *) t;
rc = pthread_create(&threads[t], NULL, calc, &pointer);
}
for (int t = 0; t < noOfThreads; t++){
rc = pthread_join(threads[t], NULL);
}
pthread_exit(NULL);
}
int-threadArray[10][10];
int arrayVar[10][2];
使用名称空间std;
void*计算(void*指针){
int*点,pointerA;
点=(int*)指针;
pointerA=*点;
int startPoint=arrayVar[pointerA][0];
int endPoint=arrayVar[pointerA][1];
int newArray[10][10];
int计算;
对于(int i=startPoint;i
for (int t = 0; t < noOfThreads; t++) {
pointer = (int *) t;
rc = pthread_create(&threads[t], NULL, calc, &pointer);
}
或者动态分配存储以向线程函数传递一个整数。这是一个完全重复的问题,由同一用户提出,该问题刚刚被用户删除:
void *calc(void *pointer) {
int t = reinterpret_cast<int>(pointer);
// ...
}
// snip
for (int t = 0; t < noOfThreads; t++) {
rc = pthread_create(&threads[t], NULL, calc, reinterpret_cast<void*>(t));
}