Z poprzednich prac w C# i Java, jestem przyzwyczajony do oświadczenia, takie jak ten nie jest bezpieczny wątku:Czy wątki Ruby nie mogą kolidować przy pisaniu?
x += y;
Jednak nie udało się zaobserwować żadnej kolizji między wątków, gdy uruchomiony powyższy kod równolegle z Ruby.
Przeczytałem, że Ruby automatically prevents multiple threads from writing to the same data concurrently. Czy to prawda? Czy operator +=
jest bezpieczny dla wątków w Ruby?
Każdy pomysł, jeśli GIL zostanie kiedykolwiek upuszczony dla wątku w trakcie wykonywania 'x + = y'? Czy jest to tylko kiedykolwiek nabyte i wydane na _statement_ granice? Lub granice wyższego poziomu? – sarnold
Bardzo szczegółowe odpowiedzi na tematy w ogóle można znaleźć na http://stackoverflow.com/questions/56087/does-ruby-have-real-multithreading. – Chris
@arnold: Wydanie GVM wszystko zależy od kodu C podległego. Na przykład w implementacji mnożenia 'Bignum', jeśli liczby są poza pewnym rozmiarem, GVL zostanie zwolniony, aby inny kod * Ruby * mógł zostać wykonany, podczas gdy C dzieli liczby. GVL naprawdę cię martwi, jeśli rozwiniesz rozszerzenia C. – Linuxios