void *computethread(void *arg1) { int error; int localdone = 0; struct timespec sleeptime; double val; sleeptime.tv_sec = 0; sleeptime.tv_nsec = TEN_MILLION; while(!localdone) { if (error = randsafe(&val)) break; if (error = add( sin(val) )) break; if (error = getdone(&localdone)) break; nanosleep(&sleeptime, NULL); } seterror(error); return NULL; }
/* ARGSUSED */ void *computethread(void *arg1) { /* compute a random partial sum */ int error; int localdone = 0; struct timespec sleeptime; double val; sleeptime.tv_sec = 0; sleeptime.tv_nsec = TEN_MILLION; /* 10 ms */ while (!localdone) { if (error = randsafe(&val)) /* get a random number between 0.0 and 1.0 */ break; if (error = add(sin(val))) break; if (error = getdone(&localdone)) break; nanosleep(&sleeptime, NULL); /* let other threads in */ } seterror(error); return NULL; }
int main(int argc, char *argv[]) { char buf[BLKSIZE]; int done = 0; int error; int fd1; int fd2; /* open the file descriptors for I/O */ if (argc != 3) { fprintf(stderr, "Usage: %s filename1 filename2\n", argv[0]); return 1; } if ((fd1 = open(argv[1], O_RDONLY)) == -1) { fprintf(stderr, "Failed to open %s:%s\n", argv[1], strerror(errno)); return 1; } if ((fd2 = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, MODE)) == -1) { fprintf(stderr, "Failed to open %s: %s\n", argv[2], strerror(errno)); return 1; } if (initsignal(SIGRTMAX) == -1) { perror("Failed to initialize signal"); return 1; } if (initread(fd1, fd2, SIGRTMAX, buf, BLKSIZE) == -1) { perror("Failed to initate the first read"); return 1; } for ( ; ; ) { dowork(); if (!done) if (done = getdone()) if (error = geterror()) fprintf(stderr, "Failed to copy file:%s\n", strerror(error)); else fprintf(stderr, "Copy successful, %d bytes\n", getbytes()); } }