我想了解爲什麼我使用GThreadPool時無法啓動超過4個線程。GThreadPool不是創建超過N個線程
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);
}
什麼「不能執行其他線程後的第一個4已經產卵」是什麼意思?你做了什麼,發生了什麼? – nos
這意味着4個線程正確執行並終止後,不能再創建線程。他們被放置在隊列中,他們永遠不會被執行。對 – polslinux