Capisco il concetto di sicurezza del filo. Sto cercando un consiglio per semplificare la sicurezza del thread quando si cerca di proteggere una singola variabile.Sicurezza filettatura di una singola variabile
Dire che ho una variabile:
double aPass;
e voglio proteggere questa variabile, così ho creare un mutex:
pthread_mutex_t aPass_lock;
Ora ci sono due maniere buone mi viene in mente di fare questo ma entrambi hanno fastidiosi svantaggi. Il primo è quello di fare una classe thread-safe per contenere la variabile:
class aPass {
public:
aPass() {
pthread_mutex_init(&aPass_lock, NULL);
aPass_ = 0;
}
void get(double & setMe) {
pthread_mutex_lock(aPass_lock);
setMe = aPass_
pthread_mutex_unlock(aPass_lock);
}
void set(const double setThis) {
pthread_mutex_lock(aPass_lock);
aPass_ = setThis;
pthread_mutex_unlock(aPass_lock);
}
private:
double aPass_;
pthread_mutex_t aPass_lock;
};
Ora Ciò manterrà aPass
totalmente sicuro, nulla può essere sbagliata e mai toccarlo, YAY! tuttavia guarda tutto quel casino e immagina la confusione quando accedici. schifoso.
L'altro modo è averli entrambi accessibili e assicurarsi di bloccare il mutex prima di utilizzare aPass.
Ma se qualcuno entra nel progetto, se si dimentica una volta per bloccarlo. Non mi piace il debug dei problemi con i thread, sono difficili.
C'è un buon modo per (usare pthreads perché devo usare QNX che ha un piccolo supporto boost) Per bloccare singole variabili senza bisogno di una grande classe e che è più sicuro, basta creare un mutex lock per andare con esso?
questa variabile è una variabile globale? Non penso che tu abbia molta altra scelta ... a meno che tu non voglia fare una classe contenitore generica thread-safe - questo ti farebbe risparmiare un po 'di codice se dovessi fare una seconda var. –
intendi come classe di un modello? sembra abbastanza buono. –
inoltre, non è possibile da ur design duplicare il var? apass è una classe così posso avere tanti oggetti quanti voglio –