الفرق بين المراجعتين ل"Ruby/ConditionVariable"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>ConditionVariable</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف: Ruby ConditionVariable ي...')
 
ط (مراجعة وتدقيق.)
 
(4 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>ConditionVariable</code> في روبي}}</noinclude>
+
<noinclude>{{DISPLAYTITLE: الصنف <code>ConditionVariable</code> في روبي}}</noinclude>
 
[[تصنيف: Ruby]]
 
[[تصنيف: Ruby]]
 +
[[تصنيف: Ruby Class]]
 
[[تصنيف: Ruby ConditionVariable]]
 
[[تصنيف: Ruby ConditionVariable]]
يمكن تمثيل الأعداد العقدية (تُسمّى أيضًا أعدادًا مركبة) كزوج مكون من عدد حقيقي ووحدة تخلية (العدد <code>i</code>) ؛ وفق الشكل <code>a+bi</code>، حيث <code>a</code> هو الجزء الحقيقي، و <code>b</code> هو الجزء التخيلي و <code>i</code> هو الوحدة الخيالية.
+
توسع كائنات الصنف <code>ConditionVariable</code> عمل الصنف <code>[[Ruby/Mutex|Mutex]]</code>. فمن الممكن باستخدام المتغيرات الشرطية إيقاف مهمة حرجة (critical section) في أثناء تنفيذها إلى حين إتاحة مورد ما.
  
العدد الحقيقي <code>a</code> يساوي رياضياتيًا العدد العقدي <code>a+0i</code>.
+
إليك المثال التالي:<syntaxhighlight lang="ruby">
 +
mutex = Mutex.new
 +
resource = ConditionVariable.new
  
يمكن إنشاء الأعداد العقدية بطريقة حرفية، وأيضا باستخدام التوابع <code>Kernel#Complex</code> أو  ‏‎<code>::rect</code> أو  ‏‎:<code>:polar</code> أو <code>‎#to_c.</code> إليك الأمثلة التالية:<syntaxhighlight lang="ruby">
+
a = Thread.new {
2+1i                #=> (2+1i)
+
  mutex.synchronize {
Complex(1)          #=> (1+0i)
+
    # Thread 'a' now needs the resource
Complex(2, 3)        #=> (2+3i)
+
    resource.wait(mutex)
Complex.polar(2, 3)  #=> (-1.9799849932008908+0.2822400161197344i)
+
    # 'a' can now have the resource
3.to_c              #=> (3+0i)
+
  }
</syntaxhighlight>يمكنك أيضا إنشاء الكائنات العقدية من الأعداد من النوع  <code>float</code> أو من السلاسل النصية كما توضح الأمثلة التالية:<syntaxhighlight lang="ruby">
+
}
Complex(0.3)        #=> (0.3+0i)
+
 
Complex('0.3-0.5i')  #=> (0.3-0.5i)
+
b = Thread.new {
Complex('2/3+3/4i')  #=> ((2/3)+(3/4)*i)
+
  mutex.synchronize {
Complex('1@2')      #=> (-0.4161468365471424+0.9092974268256817i)
+
    # Thread 'b' has finished using the resource
 +
    resource.signal
 +
  }
 +
}
  
0.3.to_c            #=> (0.3+0i)
 
'0.3-0.5i'.to_c      #=> (0.3-0.5i)
 
'2/3+3/4i'.to_c      #=> ((2/3)+(3/4)*i)
 
'1@2'.to_c          #=> (-0.4161468365471424+0.9092974268256817i)
 
</syntaxhighlight>تُصنّف الأعداد العقدية إلى مضبوطة (exact) و غير مضبوطة:<syntaxhighlight lang="ruby">
 
Complex(1, 1) / 2    #=> ((1/2)+(1/2)*i)
 
Complex(1, 1) / 2.0  #=> (0.5+0.5i)
 
 
</syntaxhighlight>
 
</syntaxhighlight>
==الثوابت==
 
===[[Ruby/Complex/I|الثابت التخيلي <code>I</code>]]===
 
يمثل الثابت <code>i</code> العدد التخيلي للأعداد العقدية.
 
 
==توابع الصنف العامة (Public Class Methods)==
 
==توابع الصنف العامة (Public Class Methods)==
===[[Ruby/Complex/polar|التابع <code>polar</code>]]===
+
===[[Ruby/ConditionVariable/new|<code>new</code>]]===
يعيد التابع ‎<code>polar</code> عددا عقديا وفق الشكل القطبي (polar form).
+
ينشئ نسخة جديدة من الصنف <code>ConditionVarialbe</code>.
===[[Ruby/Complex/rect|التابع <code>rect</code>]]===
 
يعيد التابع ‎<code>rect</code> عددا عقديا وفق الشكل الجبري أو المستطيلي (rectangular form).
 
===[[Ruby/Complex/rectangular|التابع <code>rectangular </code>]]===
 
يعيد التابع ‎<code>rectangular</code> عددا عقديا وفق الشكل الجبري أو المستطيلي (rectangular form).
 
 
==توابع الكائن العامة (Public Instance Methods)==
 
==توابع الكائن العامة (Public Instance Methods)==
===[[Ruby/Complex/star|المعامل <code>*</code>]]===
+
===[[Ruby/ConditionVariable/broadcast|<code>broadcast</code>]]===
يؤدي المعامل ‎<code>*</code>عملية الضرب على الأعداد العقدية.
+
يوقظ جميع المهام الفرعية (threads) التي تنتظر القفل (lock) المعيّن.
===[[Ruby/Complex/exp|المعامل <code>**</code>]]===
+
===[[Ruby/ConditionVariable/signal|<code>signal</code>]]===
يؤدي المعامل ‎<code>**</code>عملية الأسّ (exponentiation) على الأعداد العقدية.
+
يوقظ أول مهمة فرعية من بين المهام الفرعية (threads) التي تنتظر القفل (lock) المعيّن.
===[[Ruby/Complex/plus|المعامل <code>+</code>]]===
+
===[[Ruby/ConditionVariable/wait|<code>wait</code>]]===
يؤدي المعامل ‎<code>+</code>عملية الجمع على الأعداد العقدية.
+
يحرِّر القفل المطبَّق على الكائن <code>[[Ruby/Mutex|mutex]]</code> ثم ينتظر، ثم يستعيد (reacquires) القفل عند الإستيقاظ.
===[[Ruby/Complex/-|المعامل <code>-</code>]]===
 
يؤدي المعامل ‎<code>-</code>عملية الطرح على الأعداد العقدية.
 
===[[Ruby/Complex/negation|معامل النفي <code>-</code>]]===
 
يعيد معامل النفي ‎<code>-</code> نفي (مقابل) العدد العقدي. 
 
===[[Ruby/Complex/div|المعامل <code>/</code>]]===
 
يؤدي المعامل ‎<code>/</code>عملية القسمة على الأعداد العقدية.
 
===[[Ruby/Complex/equality operator|المعامل <code>==</code>]]===
 
يتحقق المعامل ‎<code>==</code>من تساوي عددين عقديين.
 
===[[Ruby/Complex/abs|التابع <code>abs</code>]]===
 
يعيد التابع ‎<code>abs</code> منظم (القيمة المطلقة) للعدد العقدي الذي استدعي معه.
 
===[[Ruby/Complex/abs2|التابع <code>abs2</code>]]===
 
يعيد  التابع ‎<code>abs2</code> مربع القيمة المطلقة للعدد العقدي الذي استدعي معه.
 
===[[Ruby/Complex/angle|التابع ‎<code>angle</code>]]===
 
يعيد  التابع ‎<code>angle</code> الجزء الزاوري (angle part) للشكل القطبي للعدد العقدي الذي استدعي معه.
 
===[[Ruby/Complex/arg|التابع <code>arg</code>]]===
 
يعيد التابع ‎<code>arg</code> منظم (arg  part) العدد العقدي الذي استدعي معه وفق الشكل القطبي.
 
===[[Ruby/Complex/arg|التابع <code>arg</code>]]===
 
يعيد التابع ‎<code>conj</code> مرافق العدد العقدي.
 
===[[Ruby/Complex/arg|التابع <code>conjugate</code>]]===
 
يعيد التابع ‎<code>conjugate</code> مرافق العدد العقدي. 
 
===[[Ruby/Complex/denominator|التابع <code>denominator</code>]]===
 
يعيد التابع ‎<code>denominator</code> قاسم (denominator) العدد العقدي، أي المضاعف المشترك الأصغر (lcm) للجزءين الحقيقي والتخيلي.
 
===[[Ruby/Complex/fdiv|التابع <code>fdiv</code>]]===
 
يقوم التابع ‎<code>fdiv</code> بعملية القسمة على العدد العقدي.
 
===[[Ruby/Complex/finite|التابع <code>finite?‎</code>]]===
 
يتحقق التابع ‎<code>finite?‎</code> مما إذا كانت القيمة المطلقة (absolute part) للشكل القطبي للعدد العقدي الذي استُدعي معه منتهيًا (finite). 
 
===[[Ruby/Complex/imag|التابع <code>imag</code>]]===
 
يعيد التابع ‎<code>imag</code> الجزء التخيلي للعدد العقدي. 
 
===[[Ruby/Complex/imaginary|التابع <code>imaginary</code>]]===
 
يعيد التابع ‎<code>imaginary</code> الجزء التخيلي (imaginary part) للعدد العقدي. 
 
===[[Ruby/Complex/infinite|التابع <code>‎infinite?‎</code>]]===
 
يعيد التابع ‎<code>infinite?‎</code> قيمة بحسب ما إذا كانت القيمة المطلقة (absolute part) للشكل القطبي للعدد العقدي منتهية أو غير منتهية (infinite).
 
 
 
[[Ruby/Complex/inspect|التابع <code>inspect</code>]]
 
 
 
يعيد التابع ‎<code>inspect</code> العدد العقدي على شكل سلسلة نصية لأجل التفتيش (inspection). 
 
 
 
[[Ruby/Complex/magnitude|التابع <code>magnitude</code>]]
 
 
 
يعيد التابع ‎<code>magnitude</code> الجزء المطلق (absolute part) للشكل القطبي للعدد العقدي.
 
===[[Ruby/Complex/numerator|التابع <code>‎numerator‎</code>]]===
 
يعيد التابع ‎<code>numerator</code> مقام (numerator) العدد العقدي. 
 
===[[Ruby/Complex/phase|التابع <code>phase</code>]]===
 
 يعيد التابع ‎<code>phase</code> الجزء الزاوي (angle part) للشكل القطبي للعدد العقدي الذي استُدعي معه.
 
===[[Ruby/Complex/quo|التابع <code>quo</code>]]===
 
يؤدي التابع ‎<code>quo</code>عملية القسمة على الأعداد العقدية.
 
===[[Ruby/Complex/rationalize|التابع <code>rationalize</code>]]===
 
يعيد التابع ‎<code>rationalize</code> القيمة الجذرية (rational ) المقابلة للعدد العقدي. ينبغي أن يكون الجزء التخيلي معدوما. 
 
 
 
[[Ruby/Complex/real|التابع <code>real</code>]]
 
 
 
يعيد التابع ‎<code>real</code> الجزء الحقيقي (real part) للعدد العقدي.
 
 
 
=== [[Ruby/Complex/real-3F|التابع <code>real?‎ </code>]] ===
 
يعيد التابع ‎<code>real?‎</code> القيمة <code>false</code> دائمًا. 
 
 
 
=== [[Ruby/Complex/to c|التابع <code>to_c</code>]] ===
 
يعيد التابع ‎<code>to_c</code> العدد العقدي نفسه. 
 
 
 
=== [[Ruby/Complex/to f|التابع <code>to_f</code>]] ===
 
يعيد التابع ‎<code>to_f</code> العدد العقدي الذي استدعي معه على شكل عدد من النوع <code>float</code> إن كان ذلك ممكنًا (ينبغي أن يساوي الجزء التخيلي العدد 0 تمامًا، وإلا فسيطلق الخطأ <code>RangeError</code>).
 
 
 
=== [[Ruby/Complex/to i|التابع <code>to_i</code>]] ===
 
يعيد التابع ‎<code>to_i</code> العدد العقدي الذي استدعي معه على شكل عدد صحيح من النوع <code>integer</code> إن كان ذلك ممكنًا (ينبغي أن يساوي الجزء التخيلي العدد 0 تمامًا، وإلا فسيطلق الخطأ <code>RangeError</code>).
 
 
 
=== [[Ruby/Complex/to s|التابع <code>to_s</code>]] ===
 
يعيد التابع ‎<code>to_s</code> العدد العقدي الذي استدعي معه على شكل سلسلة نصية.
 
===[[Ruby/Complex/to r|التابع <code>to_r</code>]]===
 
يعيد التابع ‎<code>to_r</code> القيمة الجذرية (rational ) المقابلة للعدد العقدي. ينبغي أن يكون الجزء التخيلي معدوما. 
 
 
==مصادر==
 
==مصادر==
<span> </span>
+
*[http://ruby-doc.org/core-2.5.1/ConditionVariable.html قسم الصنف ConditionVariable في توثيق روبي الرسمي.]
*[http://ruby-doc.org/core-2.5.1/Complex.html قسم الصنف Complex في توثيق روبي الرسمي.]
 

المراجعة الحالية بتاريخ 12:29، 21 نوفمبر 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) القفل عند الإستيقاظ.

مصادر