Ho una collezione di client sul lato server. E ci sono alcuni oggetti che devono lavorare con quella collezione - aggiungere e rimuovere client, inviare messaggi a loro, aggiornare le impostazioni di connessione e così via. Dovrebbero eseguire queste azioni simultaneamente, quindi è richiesto mutex o un'altra primitiva di sincronizzazione. Voglio condividere un'istanza di raccolta tra questi oggetti, ma tutti richiedono l'accesso a campi privati di raccolta. Spero che l'esempio di codice renda più chiaro [C ++]:
class Collection
{
std::vector< Client* > clients;
Mutex mLock;
...
}
class ClientNotifier
{
void sendMessage()
{
mLock.lock();
// loop over clients and send message to each of them
}
}
class ConnectionSettingsUpdater
{
void changeSettings( const std::string& name )
{
mLock.lock();
// if client with this name is inside collection, change its settings
}
}
Come puoi vedere, tutte queste classi richiedono l'accesso diretto ai campi privati della Collezione.
Puoi darmi un consiglio su come implementare correttamente questo comportamento, ad esempio mantenendo l'interfaccia di Collection semplice senza che sia a conoscenza dei suoi utenti?