Mi chiedo se questo è completamente sicuro per i thread e se la parola chiave volatile debba essere presente o meno.È questo (booster volatile) sempre thread safe?
using System.Threading;
class Program
{
private static volatile bool _restart = true;
private static void Main()
{
while (_restart)
{
// Do stuff here every time for as long as _restart is true
Thread.Sleep(1);
}
}
private static void SomeOtherThread()
{
Thread.Sleep(1000);
_restart = false;
}
}
penso che sia, ma voglio ricontrollare, dal momento che io non sono sicuro al 100% voglio solo essere sicuro.
Penso che la parola chiave volatile sia richiesta perché non sarebbe mai possibile avere il valore memorizzato nella cache nei registri o in uguali ottimizzazioni.
Non è proprio quello che significa thread-safe. Thread-safe (in genere) significa che più chiamate alla stessa classe/libreria non spazzeranno via i dati statici memorizzati dalla libreria. –
Nel tuo esempio, se tutto quello che vuoi è contrassegnare un altro thread, non vedo cosa non funzionerà. –
@JonathonReinhart Sì, l'ho solo come bandiera. Se questo non è thread-safety è la concorrenza? – Aidiakapi