La best practice non è quella di polling ... ma il polling non avviene internamente comunque quando un thread chiama wait ()?

13

Diciamo che abbiamo qualche thread che vuole controllare quando un altro thread ha finito il suo compito. Ho letto che dovremmo chiamare una funzione di tipo wait () che farà in modo che questo thread attenda finché non riceve una notifica che l'altro thread è finito. E questo è positivo perché significa che non stiamo eseguendo sondaggi costosi.

Tuttavia, i sondaggi non avvengono internamente ad un livello inferiore? Cioè se rendiamo che il thread wait () non sia il kernal che esegue il polling comunque per controllare quando l'altro thread è finito in modo che possa quindi notificare il primo thread?

Presumo che mi manchi qualcosa qui, qualcuno può illuminarmi?

    
posta csss 30.03.2013 - 15:25
fonte

1 risposta

28

Il sistema operativo fornisce alcune primitive per questo tipo di comunicazione tra processi che non richiedono il polling.

Se il processo A è in attesa sul mutex M, il sistema operativo sa che A non può essere eseguito e lo mette da parte in un secchio di processi in attesa che qualcosa accada. Quando il processo che contiene M lo rilascia, il sistema operativo esamina l'elenco dei processi che lo aspettano. Il primo processo sull'elenco, forse A, viene rimosso dal bucket inattivo e inserito nella coda di esecuzione . La prossima volta che A ottiene un intervallo di tempo, l'attesa () chiamata verrà restituita e il programma continua.

    
risposta data 30.03.2013 - 15:47
fonte

Leggi altre domande sui tag