#include #include "mtio.h" #define SIDE_NUM 10 #define NTHREAD 200 #define MAX_NUM (SIDE_NUM*SIDE_NUM) unsigned A[NTHREAD][SIDE_NUM][SIDE_NUM]; unsigned B[NTHREAD][SIDE_NUM][SIDE_NUM]; unsigned C[NTHREAD][SIDE_NUM][SIDE_NUM]; void random_yield() { int i; i = rand()%3; /* yield 1/3 of the time */ if(i > 1) { minithread_yield(); } return; } void proc(int n) { int i; int j; int k; for (i = 0; i < SIDE_NUM; i++) { for (j = 0; j < SIDE_NUM; j++) { A[n][i][j] = i+j; B[n][i][j] = i-j; } printf("+"); fflush(stdout); random_yield(); } printf("\n"); for (i = 0; i < SIDE_NUM; i++) { for (j = 0; j < SIDE_NUM; j++) { C[n][i][j] = A[n][i][j] + B[n][i][j]; } printf("."); fflush(stdout); random_yield(); } printf("\n"); for (i = 0; i < SIDE_NUM; i++) { for (j = 0; j < SIDE_NUM; j++) { if (C[n][i][j] != 2*i) { printf("!"); fflush(stdout); } } printf("x"); fflush(stdout); random_yield(); } } main() { int i; printf("Starting...\n"); fflush(stdout); for (i = 0; i < NTHREAD; i++ ) { minithread_fork(proc,i); } _exit(0); }