Files
CS3841/04-MatrixAddition (pthread)/matAddThread2.c
2023-02-22 22:17:40 -06:00

73 lines
1.6 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREADS 4
int *matrix1;
int *matrix2;
int *result;
int num_rows;
int num_cols;
void *matrix_addition(void *arg) {
int thread_id = *(int *)arg;
int i, j;
for (i = thread_id; i < num_rows; i += NUM_THREADS) {
for (j = 0; j < num_cols; j++) {
int index = i * num_cols + j;
result[index] = matrix1[index] + matrix2[index];
}
}
pthread_exit(NULL);
}
int main() {
int i, j;
num_rows = 3;
num_cols = 3;
// Allocate memory for matrices
matrix1 = malloc(num_rows * num_cols * sizeof(int));
matrix2 = malloc(num_rows * num_cols * sizeof(int));
result = malloc(num_rows * num_cols * sizeof(int));
// Initialize matrices
for (i = 0; i < num_rows; i++) {
for (j = 0; j < num_cols; j++) {
int index = i * num_cols + j;
matrix1[index] = rand() % 10;
matrix2[index] = rand() % 10;
}
}
// Create threads
pthread_t threads[NUM_THREADS];
int thread_ids[NUM_THREADS];
for (i = 0; i < NUM_THREADS; i++) {
thread_ids[i] = i;
pthread_create(&threads[i], NULL, matrix_addition, &thread_ids[i]);
}
// Join threads
for (i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
// Print result matrix
printf("Result matrix:\n");
for (i = 0; i < num_rows; i++) {
for (j = 0; j < num_cols; j++) {
printf("%d ", result[i * num_cols + j]);
}
printf("\n");
}
// Free memory
free(matrix1);
free(matrix2);
free(result);
return 0;
}