Sono abbastanza nuovo alla concorrenza e ho difficoltà a decidere come utilizzare i mutex. Al momento sono cosparsi di tutto il mio codice in cui interagiscono due thread. Questo uso di mutex sarebbe appropriato?Mutex per tipi di dati semplici
class Foo
{
public:
void SetMember(int n) { AcquireMutex(..); n_ = n; ReleaseMutex(...);}
private:
Thread()
{
while(1)
{
AcquireMutex(..);
// Do something with n_
ReleaseMutex(...);
}
}
};
ho un bel paio di membri di dati che possono essere letti e impostati dall'esterno da un thread diverso, e mi sto trovando che fosse un mal di testa per tenere traccia di tutte le acquisizione e rilascio del mutex.
Nome del mutex dopo che la variabile è protetta ad es. n_mutex (per n). Inoltre è necessario considerare cosa fare se è necessario aggiornare più di una variabile quando si modifica lo stato del proprio oggetto di classe, ad es. impostando una dimensione su 0 e cancellando un puntatore quando si ripristina qualcosa. Considera anche l'atomica per i tipi primitivi. –
Non ho accesso a C++ 11, il che significa che non posso usare l'atomica? –
@ Q-bertsuit Non è possibile utilizzare gli atomici della libreria standard, ma se si utilizza C++/CLI, penso che Microsoft abbia le proprie operazioni atomiche – KABoissonneault