#include #include #include #include #include #include #define M_LEN (sizeof(int)+2*sizeof(float)) sem_t *sR; sem_t *sC[3]; sem_t *sM[3]; float res[3]; int line = 0; int fin; void* compute(void* arg) { int id = *((int *) arg); free(arg); int n; float c, x; while(1) { sem_wait(sM[id]); sem_wait(sR); int r = lseek(fin, (line*3+id)*M_LEN, SEEK_SET); if (r == -1) { pthread_exit(NULL); } read(fin, &c, sizeof(float)); read(fin, &x, sizeof(float)); read(fin, &n, sizeof(int)); printf("%d-%d-%d: %f %f %d\n",id,line,r,c,x,n); sem_post(sR); res[id] = c; for (int i = 0; i