class Monitor
Verwenden Sie die Klasse Monitor, wenn Sie ein Sperrobjekt für Blöcke mit gegenseitigem Ausschluss haben möchten.
require 'monitor' lock = Monitor.new lock.synchronize do # exclusive access end
Öffentliche Instanzmethoden
Source
static VALUE
monitor_enter(VALUE monitor)
{
struct monitor_args args;
monitor_args_init(&args, monitor);
monitor_enter0(&args);
return Qnil;
}
Betritt den exklusiven Abschnitt.
Auch alias genannt: mon_enter
Source
static VALUE
monitor_exit(VALUE monitor)
{
struct monitor_args args;
monitor_args_init(&args, monitor);
monitor_exit0(&args);
return Qnil;
}
Verlässt den exklusiven Abschnitt.
Auch alias genannt: mon_exit
Alias für: synchronize
Alias für: try_enter
Source
# File ext/monitor/lib/monitor.rb, line 263 def new_cond ::MonitorMixin::ConditionVariable.new(self) end
Erstellt eine neue MonitorMixin::ConditionVariable, die mit dem Monitor-Objekt verbunden ist.
Source
static VALUE
monitor_synchronize(VALUE monitor)
{
struct monitor_args args;
monitor_args_init(&args, monitor);
monitor_enter0(&args);
return rb_ensure(monitor_sync_body, (VALUE)&args, monitor_sync_ensure, (VALUE)&args);
}
Betritt den exklusiven Abschnitt und führt den Block aus. Verlässt den exklusiven Abschnitt automatisch, wenn der Block endet. Siehe Beispiel unter MonitorMixin.
Auch alias genannt: mon_synchronize
Source
static VALUE
monitor_try_enter(VALUE monitor)
{
struct rb_monitor *mc = monitor_ptr(monitor);
VALUE current_fiber = rb_fiber_current();
if (!mc_owner_p(mc, current_fiber)) {
if (!rb_mutex_trylock(mc->mutex)) {
return Qfalse;
}
RB_OBJ_WRITE(monitor, &mc->owner, current_fiber);
mc->count = 0;
}
mc->count += 1;
return Qtrue;
}
Versucht, in den exklusiven Abschnitt einzutreten. Gibt false zurück, wenn die Sperrung fehlschlägt.
Auch alias genannt: try_mon_enter, mon_try_enter
Alias für: try_enter