Zastanawiam się, czy jest to całkowicie bezpieczne dla wątków i czy zmienne słowo kluczowe powinno być na miejscu.Czy to (volatile bool) zawsze jest bezpieczne?
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;
}
}
Myślę, że tak, ale chcę dwukrotnie sprawdzić, ponieważ nie jestem w 100% pewny, że chcę tylko mieć pewność.
Myślę, że zmienne słowo kluczowe jest wymagane, ponieważ wtedy nigdy nie byłoby możliwe, aby wartość była przechowywana w rejestrach lub podobne optymalizacje.
To nie jest tak naprawdę to, co oznacza wątek bezpieczny. Bezpieczny dla wątków (zazwyczaj) oznacza, że wiele wywołań do tej samej klasy/biblioteki nie spowoduje zdmuchnięcia statycznych danych przechowywanych przez bibliotekę. –
W twoim przykładzie jednak, jeśli wszystko, co chcesz zrobić, to oznaczenie innego wątku, nie widzę tego, co to nie zadziała. –
@ Jonathon Reinhart Tak, mam tylko flagę. Jeśli to nie jest bezpieczeństwo wątków, czy jest to współbieżność? – Aidiakapi