GThreadPool不会创建超过N个线程

时间:2015-04-26 20:17:16

标签: multithreading threadpool glib

我试图理解为什么在使用GThreadPool时我无法启动超过4个线程。

pool = g_thread_pool_new ((GFunc)func, (gpointer)&values, g_get_num_processors (), TRUE, NULL);
g_thread_pool_push (pool, val, NULL);
g_thread_pool_push (pool, val, NULL);
g_thread_pool_push (pool, val, NULL);
g_thread_pool_push (pool, val, NULL);
g_thread_pool_push (pool, val, NULL);

函数g_get_num_processors ()给我4作为结果,我正在使用它,因为我希望我的程序同时运行4个以上的线程。
我的问题是,在生成(并完成)前4个后,我无法执行其他线程 为什么我会得到这个奇怪的behvaiour?
函数func是一个简单的g_print,因为我只测试GThreadPool的工作原理。

gpointer func(gpointer data, gpointer user_data)
{
    g_print("hey\n");
    g_thread_exit(NULL);
}

1 个答案:

答案 0 :(得分:2)

你得到这种奇怪的行为,因为你在线程池的回调处理程序中调用$leniency。删除该电话。

线程池的目的不是为了处理代码退出由线程池管理的线程这一事实。