Aus früheren Arbeit in C# und Java, ich bin auf eine Aussage gewöhnt wie diese nicht in der Thread-sicher:Können Ruby-Threads beim Schreiben nicht kollidieren?
x += y;
Allerdings habe ich nicht in der Lage gewesen, eine Kollision zwischen Threads zu beobachten, wenn Sie den obigen Code ausgeführt wird parallel zu Ruby.
Ich habe gelesen, dass Ruby automatically prevents multiple threads from writing to the same data concurrently. Ist das wahr? Ist der Operator +=
also Thread-sicher in Ruby?
Irgendeine Idee, wenn die GIL jemals für einen Thread in der Mitte der Ausführung von 'x + = y' fallengelassen wird? Oder wird es immer nur an _Statement_-Grenzen erworben und freigegeben? Oder übergeordnete Grenzen? – sarnold
Eine sehr detaillierte Antwort auf Threads im Allgemeinen finden Sie unter http://stackoverflow.com/questions/56087/does-ruby-have-real-multithreading. – Chris
@sarnold: Die Veröffentlichung der GVM hängt alles vom C-Code ab. Wenn beispielsweise bei der Implementierung der Bignum-Multiplikation die Zahlen außerhalb einer bestimmten Größe liegen, wird die GVL freigegeben, so dass anderer Ruby-Code ausgeführt werden kann, während das C die Zahlen multipliziert. Die GVL ist nur dann wirklich von Bedeutung, wenn Sie C-Erweiterungen entwickeln. – Linuxios