我试图理解为什么在使用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);
}
答案 0 :(得分:2)
你得到这种奇怪的行为,因为你在线程池的回调处理程序中调用$leniency
。删除该电话。
线程池的目的不是为了处理代码退出由线程池管理的线程这一事实。