0

So I'm trying to join threads in a for loop but it's giving me the error:

invalid conversion from 'pthread_t* {aka long unsigned int*}' to 'pthread_t {aka long unsigned int}'.

The codes are as below and any help would be greatly appreciated! Thanks in advance!

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>

int threadArray[10][10];
int arrayVar[2];

using namespace std;

void *calc(void *arg){

  int startPoint = arrayVar[0];
  int endPoint = arrayVar[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 NULL;
}

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[2];

    cout << "2D Array Altered" << endl << endl;

    for (int t = 0; t < noOfThreads; t++){
      arrayVar[0] = start;
      arrayVar[1] = end;
      rc = pthread_create(&threads[t], NULL, calc, NULL);
      start = start + noOfRows;
      end = end + noOfRows;
    }

    for (int t = 0; t < noOfThreads; t++){
      rc = pthread_join(&threads[t], NULL);
    }
    pthread_exit(NULL);
}

1 Answer 1

2

I think threads[t] is actually just it's pid, it's an integer and you should pass in by value

pthread_join(threads[t], NULL)
Sign up to request clarification or add additional context in comments.

1 Comment

That's what it was! Thank you very much for your help!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.