الفرق بين المراجعتين لصفحة: «Ruby/ConditionVariable»

من موسوعة حسوب
لا ملخص تعديل
ط مراجعة وتدقيق
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>ConditionVariable</code> في روبي}}</noinclude>
<noinclude>{{DISPLAYTITLE: الصنف <code>ConditionVariable</code> في روبي}}</noinclude>
[[تصنيف: Ruby]]
[[تصنيف: Ruby]]
[[تصنيف: Ruby ConditionVariable]]
[[تصنيف: Ruby ConditionVariable]]
ترفع كائنات الصنفِ <code>ConditionVariable</code> الصنفَ <code>[[Ruby/Mutex|Mutex]]</code>. فباستخدام المتغيرات الشرطية، من الممكن إيقاف مهمة حرجة (critical section) في أثناء تنفيذها إلى حين إتاحة مورد ما.
توسع كائنات الصنف <code>ConditionVariable</code> عمل الصنف <code>[[Ruby/Mutex|Mutex]]</code>. فمن الممكن باستخدام المتغيرات الشرطية إيقاف مهمة حرجة (critical section) في أثناء تنفيذها إلى حين إتاحة مورد ما.


إليك الأمثلة التالية:<syntaxhighlight lang="ruby">
إليك المثال التالي:<syntaxhighlight lang="ruby">
mutex = Mutex.new
mutex = Mutex.new
resource = ConditionVariable.new
resource = ConditionVariable.new
سطر 24: سطر 24:


</syntaxhighlight>
</syntaxhighlight>
==توابع الصنف العامة (Public Class Methods)==
==توابع الصنف العامة (Public Class Methods)==
===[[Ruby/ConditionVariable/new|التابع <code>new</code>]]===
===[[Ruby/ConditionVariable/new|<code>new</code>]]===
ينشئ التابع ‎<code>new</code> نسخة جديدة من الصنف <code>ConditionVarialbe</code>.
ينشئ نسخة جديدة من الصنف <code>ConditionVarialbe</code>.
 
==توابع الكائن العامة (Public Instance Methods)==
== توابع الكائن العامة (Public Instance Methods) ==
===[[Ruby/ConditionVariable/broadcast|<code>broadcast</code>]]===
 
يوقظ جميع المهام الفرعية (threads) التي تنتظر القفل (lock) المعيّن.
===[[Ruby/ConditionVariable/broadcast|التابع <code>broadcast</code>]]===
===[[Ruby/ConditionVariable/signal|<code>signal</code>]]===
يوقظ التابع ‎<code>broadcast</code> جميع المهام الفرعية (threads) التي تنتظر القفل (lock) المعيّن.
يوقظ أول مهمة فرعية من بين المهام الفرعية (threads) التي تنتظر القفل (lock) المعيّن.
 
===[[Ruby/ConditionVariable/wait|<code>wait</code>]]===
===[[Ruby/ConditionVariable/signal|التابع <code>signal </code>]]===
يحرِّر القفل المطبَّق على الكائن <code>[[Ruby/Mutex|mutex]]</code> ثم ينتظر، ثم يستعيد (reacquires) القفل عند الإستيقاظ.
يوقظ التابع ‎<code>signal</code> أول مهمة فرعية من بين المهام الفرعية (threads) التي تنتظر القفل (lock) المعيّن.
 
===[[Ruby/ConditionVariable/wait|التابع <code>wait</code>]] ===
يحرر التابع ‎<code>wait</code> القفل الممسوك في الكائن <code>mutex</code>  ثم ينتظر، ثم يستعيد (reacquires) القفل عند الإستيقاظ. 
 
==مصادر==
==مصادر==
*[http://ruby-doc.org/core-2.5.1/ConditionVariable.html قسم الصنف ConditionVariable في توثيق روبي الرسمي.]
*[http://ruby-doc.org/core-2.5.1/ConditionVariable.html قسم الصنف ConditionVariable في توثيق روبي الرسمي.]

مراجعة 20:51، 10 نوفمبر 2018

توسع كائنات الصنف ConditionVariable عمل الصنف Mutex. فمن الممكن باستخدام المتغيرات الشرطية إيقاف مهمة حرجة (critical section) في أثناء تنفيذها إلى حين إتاحة مورد ما.

إليك المثال التالي:

mutex = Mutex.new
resource = ConditionVariable.new

a = Thread.new {
   mutex.synchronize {
     # Thread 'a' now needs the resource
     resource.wait(mutex)
     # 'a' can now have the resource
   }
}

b = Thread.new {
   mutex.synchronize {
     # Thread 'b' has finished using the resource
     resource.signal
   }
}

توابع الصنف العامة (Public Class Methods)

new

ينشئ نسخة جديدة من الصنف ConditionVarialbe.

توابع الكائن العامة (Public Instance Methods)

broadcast

يوقظ جميع المهام الفرعية (threads) التي تنتظر القفل (lock) المعيّن.

signal

يوقظ أول مهمة فرعية من بين المهام الفرعية (threads) التي تنتظر القفل (lock) المعيّن.

wait

يحرِّر القفل المطبَّق على الكائن mutex ثم ينتظر، ثم يستعيد (reacquires) القفل عند الإستيقاظ.

مصادر