int main(int argc, char **argv) { #define NR_VTHS 5 struct vthread *vths[NR_VTHS]; void *retvals[NR_VTHS]; /* Tests multiple threads at once */ for (long i = 0; i < NR_VTHS; i++) vths[i] = vthread_create(&vm, thread_entry, (void*)i); for (long i = 0; i < NR_VTHS; i++) { vthread_join(vths[i], &retvals[i]); assert(retvals[i] == (void*)i); } /* Tests reuse / GPC leakage */ for (long i = 0; i < NR_VTHS * 2; i++) { vths[0] = vthread_create(&vm, thread_entry, (void*)i); vthread_join(vths[0], &retvals[0]); assert(retvals[0] == (void*)i); } assert(vm.nr_gpcs == NR_VTHS); return 0; }
int main(int argc, char **argv) { int iter = 0; int d = 0; if (argc > 1) lim = strtoul(argv[1], 0, 0); if (argc > 2) d++; if (vthread_attr_init(&vm, 0) < 0) err(1, "vthread_attr_init: %r: "); vthread_create(&vm, 0, vmcall, NULL); while (! done) { logout |= 1; if (d) printf("lock."); while ((! done) && (logout & 1)) ; if (d) printf("out\n"); iter++; } printf("host iter %d guest iter %d\n", iter, count); return 0; }