#include #include #include #include #include #define N 1000 #define P 4 #define NMTX (P * P) #define EDGEPROB 0.005 char G[N][N]; char visited[N]; int Q[N]; int F, B; int C[P][2]; pthread_mutex_t Qmtx; pthread_mutex_t Vmtx[NMTX]; pthread_barrier_t Lbar; void setup ( ) { int i, j; printf("+++ Master thread calling setup\n"); for (i=0; i", i); for (j=0; j B) { printf("\n+++ All reachable nodes are visited. Current Q position is [%4d,%4d].\n\n", F, B); for (i=0; i B) end = B; C[i][0] = start; C[i][1] = end; start = end + 1; } F = B + 1; pthread_barrier_wait(&Lbar); pthread_barrier_wait(&Lbar); printf("+++ Level %d ends\n", l); ++l; } } void waitforworkers ( pthread_t tid[] ) { int i; usleep(1000); printf("\n+++ Master thread waits for workers to terminate\n"); for (i=0; i