Threadsicherer externer Prozess in Ruby, plus exitstatus überprüfen

8

Ich möchte in Ruby ein Thread-sicheres Skript ausführen, das ein externes Programm aufruft und dann den Exit-Status dieses externen Programms überprüft. Was ist der beste Weg, es zu tun? Bis jetzt habe ich $? überprüft, aber ich denke, dass ich mit anderen Teilen des Programms eine Wettlaufbedingung bekomme.

Hier ist ein Beispielcode:

%Vor%

Im Idealfall würde ich etwas wie

tun %Vor%

, sodass exitstatus untrennbar mit diesem Prozess verbunden war und nicht mit dem letzten Vorgang. Gibt es eine Möglichkeit, dies zu tun?

    
Peter 29.01.2010, 20:21
quelle

1 Antwort

15

Obwohl rb_last_status (aka $? ) eine globale Variable ist, macht Ruby einen magischen Trick, um es pro-Thread zu machen: In rb_thread_save_context speichert es rb_last_status in der alten Thread-Struktur; rb_thread_restore_context setzt rb_last_status auf den gespeicherten Wert. Wenn Sie eine Race-Bedingung mit $? haben, ist es ein Ruby-Bug.

    
Wayne Conrad 29.01.2010, 20:35
quelle

Tags und Links