From a8fa4321528482c9656dc1ea244783ff33d9fb22 Mon Sep 17 00:00:00 2001 From: leitner Date: Tue, 27 Mar 2018 02:48:47 +0000 Subject: [PATCH] minimal demonstrator program for iom api --- test/iom.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 test/iom.c diff --git a/test/iom.c b/test/iom.c new file mode 100644 index 0000000..c0f2748 --- /dev/null +++ b/test/iom.c @@ -0,0 +1,60 @@ +#include "io.h" +#include +#include +#include + +iomux_t c; + +int worker(void* arg) { + uintptr_t i=(uintptr_t)arg; + char buf[100]; + int64 s; + int events; + + write(1,buf,sprintf(buf,"starting thread %ld\n",i)); + + switch (iom_wait(&c,&s,&events,1000)) { + case -1: + perror("iom_wait"); + return -1; + case 0: + write(1,buf,sprintf(buf,"timeout in thread %ld\n",i)); + return 0; + case 1: + write(1,buf,sprintf(buf,"input found by thread %8ld\n",i)); + return 1; + } + + return 0; +} + +int main() { + iom_init(&c); + if (iom_add(&c,0,IOM_READ)==-1) { + perror("iom_add"); + return 1; + } + thrd_t x[4]; + int i; + puts("launching threads"); + for (i=0; i<4; ++i) + if (thrd_create(&x[i],worker,(void*)(uintptr_t)i)==-1) { + perror("thrd_create"); + return 111; + } + +// sleep(1); +// iom_abort(&c); + + puts("joining threads"); + int r; + for (i=0; i<4; ++i) { + if (thrd_join(x[i],&r)==-1) { + perror("thrd_join"); + return 111; + } + printf("thread %d returned %d\n",i,r); + } + + return 0; +}