class Thread::Mutex
Thread::Mutex implementiert ein einfaches Semaphor, das verwendet werden kann, um den Zugriff auf gemeinsam genutzte Daten aus mehreren gleichzeitigen Threads zu koordinieren.
Beispiel
semaphore = Thread::Mutex.new a = Thread.new { semaphore.synchronize { # access shared resource } } b = Thread.new { semaphore.synchronize { # access shared resource } }
Öffentliche Klassenmethoden
Öffentliche Instanzmethoden
Source
# File thread_sync.rb, line 100 def lock Primitive.rb_mut_lock end
Versucht, den Lock zu ergreifen und wartet, wenn er nicht verfügbar ist. Löst ThreadError aus, wenn mutex vom aktuellen Thread gesperrt wurde.
Source
# File thread_sync.rb, line 83 def locked? Primitive.cexpr! %q{ RBOOL(mutex_locked_p(mutex_ptr(self))) } end
Gibt true zurück, wenn dieser Lock derzeit von einem Thread gehalten wird.
Source
# File thread_sync.rb, line 91 def owned? Primitive.rb_mut_owned_p end
Gibt true zurück, wenn dieser Lock derzeit vom aktuellen Thread gehalten wird.
Source
# File thread_sync.rb, line 147 def sleep(timeout = nil) Primitive.rb_mut_sleep(timeout) end
Gibt den Lock frei und pausiert timeout Sekunden, wenn er angegeben und nicht nil ist, oder für immer. Löst ThreadError aus, wenn mutex nicht vom aktuellen Thread gesperrt wurde.
Wenn der Thread als nächstes aufgeweckt wird, versucht er, den Lock erneut zu ergreifen.
Beachten Sie, dass diese Methode auch ohne expliziten Aufruf von Thread#wakeup aufgeweckt werden kann. Zum Beispiel durch Empfangen eines Signals und so weiter.
Gibt die geschlafene Zeit in Sekunden zurück, wenn aufgeweckt, oder nil, wenn ein Timeout auftritt.
Source
# File thread_sync.rb, line 127 def synchronize raise ThreadError, "must be called with a block" unless defined?(yield) Primitive.rb_mut_synchronize end
Erlangt einen Lock, führt den Block aus und gibt den Lock frei, wenn der Block abgeschlossen ist. Siehe das Beispiel unter Thread::Mutex.
Source
# File thread_sync.rb, line 109 def try_lock Primitive.rb_mut_trylock end
Versucht, den Lock zu erlangen und gibt sofort zurück. Gibt true zurück, wenn der Lock gewährt wurde.
Source
# File thread_sync.rb, line 118 def unlock Primitive.rb_mut_unlock end
Versucht, den Lock zu ergreifen und wartet, wenn er nicht verfügbar ist. Löst ThreadError aus, wenn mutex vom aktuellen Thread gesperrt wurde.