update name of code to labcodes
This commit is contained in:
84
labcodes/lab6/user/matrix.c
Normal file
84
labcodes/lab6/user/matrix.c
Normal file
@@ -0,0 +1,84 @@
|
||||
#include <ulib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define MATSIZE 10
|
||||
|
||||
static int mata[MATSIZE][MATSIZE];
|
||||
static int matb[MATSIZE][MATSIZE];
|
||||
static int matc[MATSIZE][MATSIZE];
|
||||
|
||||
void
|
||||
work(unsigned int times) {
|
||||
int i, j, k, size = MATSIZE;
|
||||
for (i = 0; i < size; i ++) {
|
||||
for (j = 0; j < size; j ++) {
|
||||
mata[i][j] = matb[i][j] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
yield();
|
||||
|
||||
cprintf("pid %d is running (%d times)!.\n", getpid(), times);
|
||||
|
||||
while (times -- > 0) {
|
||||
for (i = 0; i < size; i ++) {
|
||||
for (j = 0; j < size; j ++) {
|
||||
matc[i][j] = 0;
|
||||
for (k = 0; k < size; k ++) {
|
||||
matc[i][j] += mata[i][k] * matb[k][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i = 0; i < size; i ++) {
|
||||
for (j = 0; j < size; j ++) {
|
||||
mata[i][j] = matb[i][j] = matc[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
cprintf("pid %d done!.\n", getpid());
|
||||
exit(0);
|
||||
}
|
||||
|
||||
const int total = 21;
|
||||
|
||||
int
|
||||
main(void) {
|
||||
int pids[total];
|
||||
memset(pids, 0, sizeof(pids));
|
||||
|
||||
int i;
|
||||
for (i = 0; i < total; i ++) {
|
||||
if ((pids[i] = fork()) == 0) {
|
||||
srand(i * i);
|
||||
int times = (((unsigned int)rand()) % total);
|
||||
times = (times * times + 10) * 100;
|
||||
work(times);
|
||||
}
|
||||
if (pids[i] < 0) {
|
||||
goto failed;
|
||||
}
|
||||
}
|
||||
|
||||
cprintf("fork ok.\n");
|
||||
|
||||
for (i = 0; i < total; i ++) {
|
||||
if (wait() != 0) {
|
||||
cprintf("wait failed.\n");
|
||||
goto failed;
|
||||
}
|
||||
}
|
||||
|
||||
cprintf("matrix pass.\n");
|
||||
return 0;
|
||||
|
||||
failed:
|
||||
for (i = 0; i < total; i ++) {
|
||||
if (pids[i] > 0) {
|
||||
kill(pids[i]);
|
||||
}
|
||||
}
|
||||
panic("FAIL: T.T\n");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user