Provo a sviluppare un threadpool in C++ e mi chiedo se è meglio restituire() il thread nel loop principale del thread di lavoro o attendere una variabile di condizione:Implementazione del threadpool: condition_variables vs. yield()
void worker_thread(void)
{
// this is more or less pseudocode
while(!done)
{
if(task_available)
run_task();
else
std::this_thread::yield();
}
}
contro
void worker_thread(void)
{
// this is more or less pseudocode
std::unique_lock<std::mutex> lk(mutex_);
while(!done)
{
if(task_available)
run_task();
else
condition_.wait(lk);
}
}
Tutte le idee? Ci saranno differenze di prestazioni tra entrambe le versioni?
Come viene implementato l'approccio condizionale? Hanno un simile meccanismo di attesa che il worker_thread sopra? Il rendimento – headmyshoulder
fa sì che il thread chiamante esegua l'esecuzione su un altro thread pronto per essere eseguito sul processore corrente (vedere SwitchToThread per Windows). –
per condizionali, vedere pthread_cond_wait. quindi fa sì che il thread entri in uno stato di sospensione finché non viene attivato il condizionale (come un evento su Windows) –