#include #include #include #include "sem.h" static int a[1000][100]; volatile int sum; struct param { size_t index; SEM* sem; }; static void *sumRow(void *arg) { struct param *par = arg; int localSum = sum; for (int j = 0; j < 100; j++) localSum += a[par->index][j]; sum = localSum; return NULL; } int main(int argc, char *argv[]) { SEM* sem = semCreate(1); // fehlerbehandlung pthread_t tids[1000]; struct param args[1000]; for (int i = 0; i < 1000; ++i) { for (int j = 0; j < 100; ++j) { a[i][j] = 1; } } for (int i = 0; i < 1000; i++) { args[i].index = i; args[i].sem = sem; pthread_create(&tids[i], NULL, sumRow, &args[i]); } for (int i = 0; i < 1000; i++) pthread_join(tids[i], NULL); printf("%d\n", sum); semDestroy(sem); }