GThreadPool 没有创建超过 N 个线程
GThreadPool is not creating more than N threads
我想了解为什么在使用 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 个线程后我无法执行其他线程。
为什么我会遇到这种奇怪的行为?
函数 func
很简单 g_print
因为我只是在测试 GThreadPool 的工作原理。
gpointer func(gpointer data, gpointer user_data)
{
g_print("hey\n");
g_thread_exit(NULL);
}
您之所以会出现这种奇怪的行为,是因为您在线程池的回调处理程序中调用了 g_thread_exit(NULL);
。删除该调用。
线程池并非设计用于处理您的代码退出由线程池管理的线程这一事实。
我想了解为什么在使用 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 个线程后我无法执行其他线程。
为什么我会遇到这种奇怪的行为?
函数 func
很简单 g_print
因为我只是在测试 GThreadPool 的工作原理。
gpointer func(gpointer data, gpointer user_data)
{
g_print("hey\n");
g_thread_exit(NULL);
}
您之所以会出现这种奇怪的行为,是因为您在线程池的回调处理程序中调用了 g_thread_exit(NULL);
。删除该调用。
线程池并非设计用于处理您的代码退出由线程池管理的线程这一事实。