Quando ho detto atomico, intendevo che l'insieme di istruzioni verrà eseguito senza alcun cambio di contesto in un'altra discussione sullo stesso processo (altri tipi di interruttori devono essere fatti ovviamente). L'unica soluzione che ho trovato è quella di sospendere tutti i thread tranne che attualmente eseguiti prima della parte e riprenderli dopo di essa. Qualunque modo più elegante?È possibile creare un pezzo di codice atomico (C#)?
Il motivo per cui desidero farlo è raccogliere uno stato coerente di oggetti in esecuzione su più thread. Tuttavia, il loro codice non può essere modificato (sono già compilati), quindi non posso inserire mutex, semafori, ecc. L'operazione atomica è ovviamente raccolta di stati (cioè copia di alcune variabili).
Cosa stai cercando di ottenere? Sospendere tutti gli altri thread è un modo pericoloso per andare su cose e si potrebbe finire con un deadlock in cui il thread sveglio cerca di fare qualcosa e uno dei thread sospesi ha una sorta di blocco che non può mai rilasciare. –
Non ho mai sentito la parola atomica in questo contesto. Lo so solo come parte di ACID, la definizione di una transazione. A proposito, perché hai bisogno di questo? –
Le singole operazioni IL sono atomiche. Ci sono poche classi (una è Interlock) che supportano le operazioni atomiche. A parte questo, no. E non vedo il punto. – Amy