Ho un'applicazione che genererà più thread. Tuttavia, ritengo che potrebbe esserci un problema con i thread che accedono ai dati che non dovrebbero essere. Sono relativamente nuovo nel threading così nudo con me.Passaggio di strutture di dati a thread diversi
Ecco la struttura dell'applicazione filettato (spiacente per la grossolanità):
MainThread
/ \
/ \
/ \
Thread A Thread B
/ \ / \
/ \ / \
/ \ / \
Thread A_1 Thread A_2 Thread B_1 Thread B_2
Sotto ogni lettered filo (che potrebbe essere molti), vi saranno solo due fili e vengono sparati sequenzialmente. Il problema che sto avendo è che non sono del tutto sicuro di come passare in una struttura dati in questi thread.
Quindi, la struttura dei dati viene creata in MainThread, verrà modificata nella stringa letterale (Thread A, ecc.) Specifica per quel thread e quindi una variabile membro da tale infrastruttura viene inviata ai thread Letter_Numbered.
Attualmente, la classe thread con lettere ha una variabile membro e quando la classe viene costruita, la struttura dati da mainthread viene passata per riferimento, richiamando il costruttore di copie in modo che il thread con lettere abbia la propria copia con cui giocare.
Il thread con numero di lettere contiene semplicemente una variabile stringa dalla struttura dati all'interno del thread con lettere. La mia domanda è, è accettabile? C'è un modo molto migliore per garantire che ogni thread con lettere abbia la propria struttura dati con cui giocare?
Siamo spiacenti per la spiegazione un po 'scarsa, si prega di lasciare commenti e proverò a chiarire.
MODIFICA: Quindi il mio costruttore di thread con lettere dovrebbe prendere il VALORE della struttura dati, non il riferimento?
Forse parlaci un po 'di ciò che vuoi ottenere. Sono un po 'perplesso dall'uso di due thread sequenziali: vuoi dire che uno inizia quando l'altro finisce? – mdma
+1 per la domanda ben articolata –
@mdma: intendi il carattere numerato? Se è così allora sì, il thread con lettere si spegne il primo carattere numerato, attende che sia terminato (o errore) e spenga il secondo carattere numerato. Questo aiuta? – Robb