#include #include #include #include #include #include #include #include static void * mbody(void *data ) { struct kevent kev; int index = *((int *) data); int timo = 50 + ((index%10) * 10); int i; int retevt; int idq = kqueue(); if (idq == -1) { fprintf(stderr, "kqueue failed: %d", errno); pthread_exit(NULL); return (NULL); } EV_SET(&kev, index, EVFILT_TIMER, EV_ADD, 0, timo, 0); retevt = kevent(idq, &kev, 1, NULL, 0, NULL); if (retevt != -1) { for(i=0; i<1000; i++) { retevt = kevent(idq, NULL, 0, &kev, 1, NULL); if (retevt != 1) { fprintf(stderr, "error kevent thread: %d\n", index); break; } } EV_SET(&kev, index, EVFILT_TIMER, EV_DELETE, 0, timo, 0); if (kevent(idq, &kev, 1, NULL, 0, NULL) == -1) { fprintf(stderr, "error on delete. thread %d, errno: %d", index, errno); close(idq); pthread_exit(NULL); return (NULL); } } else fprintf(stderr, "error %d on add, thread: %d\n", retevt, index); close(idq); pthread_exit(NULL); return (NULL); } int main(void) { int num_thread = 1000; pthread_t mbody_id[num_thread]; int params[num_thread]; int i, iter; for (iter = 0;;iter++) { printf("iteration: %d\n", iter + 1); for (i=0; i