Test(logqueue, test_with_threads) { LogQueue *q; GThread *thread_feed[FEEDERS], *thread_consume; GThread *other_threads[FEEDERS]; gint i, j; log_queue_set_max_threads(FEEDERS); for (i = 0; i < TEST_RUNS; i++) { fprintf(stderr,"starting testrun: %d\n",i); q = log_queue_fifo_new(MESSAGES_SUM, NULL); log_queue_set_use_backlog(q, TRUE); for (j = 0; j < FEEDERS; j++) { fprintf(stderr,"starting feed thread %d\n",j); other_threads[j] = g_thread_create(_output_thread, NULL, TRUE, NULL); thread_feed[j] = g_thread_create(_threaded_feed, q, TRUE, NULL); } thread_consume = g_thread_create(_threaded_consume, q, TRUE, NULL); for (j = 0; j < FEEDERS; j++) { fprintf(stderr,"waiting for feed thread %d\n",j); g_thread_join(thread_feed[j]); g_thread_join(other_threads[j]); } g_thread_join(thread_consume); log_queue_unref(q); } fprintf(stderr, "Feed speed: %.2lf\n", (double) TEST_RUNS * MESSAGES_SUM * 1000000 / sum_time); }
void main_loop_io_worker_init(void) { main_loop_io_workers.max_threads = MIN(MAX(MAIN_LOOP_MIN_WORKER_THREADS, get_processor_count()), MAIN_LOOP_MAX_WORKER_THREADS); main_loop_io_workers.thread_start = (void (*)(void *)) main_loop_worker_thread_start; main_loop_io_workers.thread_stop = (void (*)(void *)) main_loop_worker_thread_stop; iv_work_pool_create(&main_loop_io_workers); log_queue_set_max_threads(MIN(main_loop_io_workers.max_threads, MAIN_LOOP_MAX_WORKER_THREADS)); }