Domanda

Ho un oggetto di coda .NET. Il filo produttore do l'operazione Enqueue, i dati accodate nella coda è un byte array [], mentre l'altro filo consumatore do l'operazione Dequeue sullo stesso oggetto coda.

Io uso le serrature a gestire la concorrenza. Il mio codice sembra funzionare bene per tutto il tempo, ma ieri, cose strane è successo. I dati che ho ricevuto da un thread consumatore era diverso dai dati che ho prodotto: la lunghezza della matrice sbagliato, ripetuta serie ... E 'questo causato dalla protezione thread-safe fallito?

A mio avviso, la concorrenza sarebbe solo causare la perdita di dati.

Il mio primo post qui, portare con me.

È stato utile?

Soluzione

E 'molto peggio di semplice perdita di dati. La classe Queue può riassegnare nel suo buffer interno quando necessario per accogliere un numero crescente di elementi. bloccaggio improprio può accedere al nuovo tampone con vecchi valori degli indici di testa e di coda. Potrai ottenere solo un'eccezione quando si è fortunati, più probabile è che si ottiene semplicemente l'elemento sbagliata.

Altri suggerimenti

Il filo produttore non dovrebbe mantenere un riferimento alla matrice e modificarlo dopo che è accodato. Crea sempre un nuovo array. (I può essere affermando l'ovvio, ma è difficile fare di meglio, senza ulteriori informazioni)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top