2010-03-26 6 views
7

In uno scenario multithread, ho un metodo come questo:Un metodo che aspetta un cambio di stato dovrebbe essere const?

bool WaitForChange(time_duration WaitTime) const; 

Questo metodo attende sia finché lo stato dell'oggetto è cambiato e restituisce true, o fino a quando i tempi di timeout out (come si fa a dire che?) e restituisce false.

La mia intuizione è che lo const protegge da effetti collaterali indesiderati del metodo stesso, quindi va bene. Ma poi di nuovo, alcuni utenti potrebbero pensare che lo stato del non potrebbe essere cambiato, dal momento che il metodo è dichiarato const. Quel utente è stupido, o dovrei rendere il metodo diverso da const per evitare confusione?

+0

Come aspettare? variabili di condizione, o sleep polling? – nos

+0

Sto usando un 'boost :: condition_variable' per aspettare e un' boost :: mutex' per il locking. –

risposta

10

Dichiarando il metodo come const, si dice "chiamata a questo metodo non cambia lo stato dell'oggetto." Questo è (si spera) vero. Quindi rendilo const.

Se qualcuno pensa, constanza significa "Mentre questo metodo viene chiamato, nessun altro può cambiare lo stato dell'oggetto" di quello che è sbagliato.

4

Io voto per la costanza.

Il metodo in sé non cambia nulla, solo aspetta ...

0

Se stai aspettando di vedere se i membri dell'oggetto sono cambiati ... che dire volatile?

bool WaitForChange(time_duration WaitTime) volatile 

const implica lo stato dell'oggetto è identica per tutta la chiamata di funzione, quindi non sarebbe usarlo. volatile, d'altra parte, indica al compilatore che i membri devono essere riprogrammati ogni volta che si accede, che è probabilmente quello che vuoi se stai cercando cambiamenti.

+0

-1 Stai confondendo l'idioma con la sintassi. 'const' garantisce che la funzione non" modificherà lo stato dell'oggetto per il quale è chiamato ". Quello e niente altro. 'volatile' è necessario solo quando" un'entità può avere il suo valore modificato per mezzo extralinguistico, ad esempio un orologio in tempo reale ". (Entrambe le citazioni da Stroustrup, http://www2.research.att.com/~bs/glossary.html) – egrunin

Problemi correlati