Salve ragazzi,
avrei un dubbio a proposito di un problema riguardo al delete di un oggetto che potrebbe avvenire anche in contemporanea da + thread.
Il progettino è un semplice programmino client-server TCP tramite i winsock (quindi su windows).
Utilizzo select() per la comunicazione e quindi un'architettura ad eventi. Ho un thread separato dove eseguo la select sui vari socket (il socket del server ed X client connessi al server). Il server mantiene una sua lista di client connessi.
La questione che non capisco come gestire al meglio è il momento della chiusura della connessione del client. Cioè:
- ho il thread della select che, in caso riceva una notifica di chiusura del client, richiama client->close() che andrebbe a chiudere la socket di connessione del client e dovrebbe fare il delete dell'oggetto Socket del client.
- quando il server viene chiuso, il server fa sempre client->close() su tutti i suoi client in lista che chiude la socket di connessione del client e dovrebbe fare il delete dell'oggetto Socket del client.
Quando chiudo il server ed un client notifica la disconnessione nello stesso momento della chiusura del server, 2 thread cercano di fare client->close() e spesso si verifica un seg fault perchè ovviamente entrambi fanno il delete e quello che lo fa per secondo va a cancellare un oggetto già cancellato.
Secondo voi come posso fare a "sincronizzare" i 2 delete..? probabilmente dovrei tenere un flag fuori dall'oggetto così da capire se l'oggetto è stato già deletato e non cancellarlo di nuovo ma mi sembra schifosa come soluzione. Non è una domanda "tecnica" sulla programmazione, piu' che altro chiedo un consiglio sul design..
grazie in anticipo![]()