#include #include #include #include #include struct iter { int in, out; }; static long counter; static void * inc(void *arg) { struct iter *iter = (struct iter *)arg; int buf; while (read(iter->in, &buf, sizeof(buf)) > 0) { buf++; counter = buf; write(iter->out, &buf, sizeof(buf)); } close(iter->in); close(iter->out); return NULL; } int main(int argc, char *argv[]) { pthread_t t1, t2; int fds[4]; pipe(fds); pipe(fds+2); struct iter iter1 = { .in = fds[0], .out = fds[3], }; struct iter iter2 = { .in = fds[2], .out = fds[1], }; pthread_create(&t1, NULL, inc, &iter1); pthread_create(&t2, NULL, inc, &iter2); write(iter1.out, &counter, sizeof(counter)); sleep(1); pthread_cancel(t1); pthread_cancel(t2); printf("messages/sec: %lu\n", counter); printf("time for message: %luns\n", 1000000000 / counter); return 0; }