Sto scrivendo una struttura dati speciale che sarà disponibile in una libreria .NET e una delle caratteristiche di questa struttura dati è che sarà thread-safe, a condizione che solo un thread scriva dati su di esso e che venga letto solo un thread dati da esso (il thread del lettore e il thread dello scrittore possono essere diversi).Come rilevare l'accesso incrociato in .NET (impone l'affinità del thread)?
La domanda è: come posso far rispettare tutte le operazioni di lettura eseguite dallo stesso thread?
La mia soluzione sarebbe acquisire System.Threading.Thread.ManagedThreadID e memorizzarlo in un membro privato al primo Read. Quindi, nelle letture successive per verificare il ManagedThreadID rispetto a quello salvato e se sono differenti per generare un'eccezione.
È sufficiente, oppure esiste un meccanismo diverso più affidabile per farlo.
Nota: V'è un requisito che questa biblioteca sia utilizzabile senza un contesto Windows.Forms ..
Grazie Jared. Solo curioso, vedi qualche ragione @ la risposta di sixlettervariables sarebbe meglio/peggio? –
@Miky D, l'unica ragione per cui direi che è peggio è perché mescola le responsabilità. Avere una classe separata per il controllo di un accesso incrociato non valido fornisce un'esperienza coerente riutilizzabile. È una piccola quantità di codice e l'unica cosa che puoi davvero rovinare è il messaggio di errore, quindi IMHO non è un grosso problema. – JaredPar
Sono d'accordo con JaredPar per quanto riguarda l'utilizzo di una classe, non solo con l'utilizzo dell'ID gestito. Ma sì, +1 usa un'altra classe per gestire la logica. – user7116