ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- PKc]G)synchronize-i.rinu[U:RDoc::AnyMethod[iI"synchronize:EFI"MonitorMixin#synchronize;TF: publico:RDoc::Markup::Document: @parts[: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I"();T@ FI"MonitorMixin;FcRDoc::NormalModule0[@FI"mon_synchronize;FPKd];&ddmon_owned%3f-i.rinu[U:RDoc::AnyMethod[iI"mon_owned?:ETI"MonitorMixin#mon_owned?;TF: privateo:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I">Returns true if this monitor is locked by current thread.;T: @fileI"ext/monitor/lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"MonitorMixin;TcRDoc::NormalModule00PKd]oaamon_locked%3f-i.rinu[U:RDoc::AnyMethod[iI"mon_locked?:ETI"MonitorMixin#mon_locked?;TF: privateo:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"9Returns true if this monitor is locked by any thread;T: @fileI"ext/monitor/lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"MonitorMixin;TcRDoc::NormalModule00PKd]<7new-c.rinu[U:RDoc::AnyMethod[iI"new:ETI"MonitorMixin::new;TT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"OUse extend MonitorMixin or include MonitorMixin instead ;TI"Pof this constructor. Have look at the examples above to understand how to ;TI"use this module.;T: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I" (*args);T@TI"MonitorMixin;FcRDoc::NormalModule00PKd]buf.empty?. The producer thread (main thread) reads a ;TI"Qline from ARGF and pushes it into buf then calls empty_cond.signal ;TI"/to notify the consumer thread of new data.;T@S; ; i; I"Simple Class include;T@o;;[ I"require 'monitor' ;TI" ;TI"%class SynchronizedArray < Array ;TI" ;TI" include MonitorMixin ;TI" ;TI" def initialize(*args) ;TI" super(*args) ;TI" end ;TI" ;TI" alias :old_shift :shift ;TI"# alias :old_unshift :unshift ;TI" ;TI" def shift(n=1) ;TI" self.synchronize do ;TI" self.old_shift(n) ;TI" end ;TI" end ;TI" ;TI" def unshift(item) ;TI" self.synchronize do ;TI"" self.old_unshift(item) ;TI" end ;TI" end ;TI" ;TI" # other methods ... ;TI" end ;T;0o; ;[I"P+SynchronizedArray+ implements an Array with synchronized access to items. ;TI"GThis Class is implemented as subclass of Array which includes the ;TI"MonitorMixin module.;T: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below0;0;0[[[[[I" class;T[[: public[[I"extend_object;FI"lib/monitor.rb;T[I"new;T@m[:protected[[: private[[I" instance;T[[;[ [I"mon_enter;F@m[I" mon_exit;F@m[I"mon_synchronize;F@m[I"mon_try_enter;F@m[I" new_cond;F@m[I"synchronize;F@m[I"try_mon_enter;F@m[;[[;[ [I"mon_check_owner;F@m[I"mon_enter_for_cond;F@m[I"mon_exit_for_cond;F@m[I"mon_initialize;F@m[[U:RDoc::Context::Section[i0o;;[;0;0[@a@acRDoc::TopLevelPKd]qȞmon_initialize-i.rinu[U:RDoc::AnyMethod[iI"mon_initialize:EFI" MonitorMixin#mon_initialize;TF: privateo:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"MInitializes the MonitorMixin after being included in a class or when an ;TI"3object has been extended with the MonitorMixin;T: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"MonitorMixin;FcRDoc::NormalModule00PKd]x-extend_object-c.rinu[U:RDoc::AnyMethod[iI"extend_object:EFI" MonitorMixin::extend_object;TT: publico:RDoc::Markup::Document: @parts[: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I" (obj);T@ TI"MonitorMixin;FcRDoc::NormalModule00PKd]lޱS^^ ConditionVariable/broadcast-i.rinu[U:RDoc::AnyMethod[iI"broadcast:EFI".MonitorMixin::ConditionVariable#broadcast;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"0Wakes up all threads waiting for this lock.;T: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"ConditionVariable;TcRDoc::NormalClass00PKd]eeConditionVariable/signal-i.rinu[U:RDoc::AnyMethod[iI" signal:EFI"+MonitorMixin::ConditionVariable#signal;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"=Wakes up the first thread in line waiting for this lock.;T: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"ConditionVariable;TcRDoc::NormalClass00PKd]%kz  ConditionVariable/new-c.rinu[U:RDoc::AnyMethod[iI"new:ETI")MonitorMixin::ConditionVariable::new;TT: publico:RDoc::Markup::Document: @parts[: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I"(monitor);T@ FI"ConditionVariable;TcRDoc::NormalClass00PKd]AM33ConditionVariable/wait-i.rinu[U:RDoc::AnyMethod[iI" wait:EFI")MonitorMixin::ConditionVariable#wait;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"_Releases the lock held in the associated monitor and waits; reacquires the lock on wakeup.;To:RDoc::Markup::BlankLineo; ; [I"PIf +timeout+ is given, this method returns after +timeout+ seconds passed, ;TI",even if no other thread doesn't signal.;T: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I"(timeout = nil);T@FI"ConditionVariable;TcRDoc::NormalClass00PKd]ww!ConditionVariable/wait_until-i.rinu[U:RDoc::AnyMethod[iI"wait_until:EFI"/MonitorMixin::ConditionVariable#wait_until;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"GCalls wait repeatedly until the given block yields a truthy value.;T: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"ConditionVariable;TcRDoc::NormalClass00PKd]1ww!ConditionVariable/wait_while-i.rinu[U:RDoc::AnyMethod[iI"wait_while:EFI"/MonitorMixin::ConditionVariable#wait_while;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"GCalls wait repeatedly while the given block yields a truthy value.;T: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"ConditionVariable;TcRDoc::NormalClass00PKd]ofm--,ConditionVariable/cdesc-ConditionVariable.rinu[U:RDoc::NormalClass[iI"ConditionVariable:ETI"$MonitorMixin::ConditionVariable;TI" Object;To:RDoc::Markup::Document: @parts[o;;[o:RDoc::Markup::Paragraph;[I".FIXME: This isn't documented in Nutshell.;To:RDoc::Markup::BlankLineo; ;[I"NSince MonitorMixin.new_cond returns a ConditionVariable, and the example ;TI"Habove calls while_wait and signal, this class should be documented.;T: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below0; 0; 0[[[[[I" class;T[[: public[[I"new;TI"lib/monitor.rb;T[:protected[[: private[[I" instance;T[[; [ [I"broadcast;F@"[I" signal;F@"[I" wait;F@"[I"wait_until;F@"[I"wait_while;F@"[;[[;[[[U:RDoc::Context::Section[i0o;;[; 0; 0[@I"MonitorMixin;FcRDoc::NormalModulePKd]۬33 mon_exit-i.rinu[U:RDoc::AnyMethod[iI" mon_exit:EFI"MonitorMixin#mon_exit;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"Leaves exclusive section.;T: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"MonitorMixin;FcRDoc::NormalModule00PKd]+`mon_synchronize-i.rinu[U:RDoc::AnyMethod[iI"mon_synchronize:EFI"!MonitorMixin#mon_synchronize;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"LEnters exclusive section and executes the block. Leaves the exclusive ;TI"Dsection automatically when the block exits. See example under ;TI"+MonitorMixin+.;T: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below00I";T[[I"synchronize;Fo;; [; @; 0I"();T@FI"MonitorMixin;FcRDoc::NormalModule00PKF]ź mon_exit_for_cond-i.rinu[U:RDoc::AnyMethod[iI"mon_exit_for_cond:EFI"#MonitorMixin#mon_exit_for_cond;TF: privateo:RDoc::Markup::Document: @parts[: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I"();T@ FI"MonitorMixin;FcRDoc::NormalModule00PKF]rL*ConditionVariable/Timeout/cdesc-Timeout.rinu[U:RDoc::NormalClass[iI" Timeout:ETI"-MonitorMixin::ConditionVariable::Timeout;TI"Exception;To:RDoc::Markup::Document: @parts[o;;[: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below0; 0; 0[[[[[I" class;T[[: public[[:protected[[: private[[I" instance;T[[; [[; [[; [[[U:RDoc::Context::Section[i0o;;[; 0; 0[@I"$MonitorMixin::ConditionVariable;TcRDoc::NormalClassPKF]hg"mon_enter_for_cond-i.rinu[U:RDoc::AnyMethod[iI"mon_enter_for_cond:EFI"$MonitorMixin#mon_enter_for_cond;TF: privateo:RDoc::Markup::Document: @parts[: @fileI"lib/monitor.rb;T:0@omit_headings_from_table_of_contents_below000[I" (count);T@ FI"MonitorMixin;FcRDoc::NormalModule00PKc]G)synchronize-i.rinu[PKd];&ddTmon_owned%3f-i.rinu[PKd]oaamon_locked%3f-i.rinu[PKd]<7new-c.rinu[PKd]