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

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
ط (مراجعة وتدقيق.)
 
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة)
سطر 1: سطر 1:
 +
يمكن استخدام الصنف <code>Mutex</code> وكائناته كواجهة لتنسيق الوصول إلى البيانات المشتركة من عدة خيوط (threads) موجودة وتعمل في نفس الوقت. إليك هذا المثال:<syntaxhighlight lang="ruby">
 +
semaphore = Mutex.new
 +
 +
a = Thread.new {
 +
  semaphore.synchronize {
 +
    # access shared resource
 +
  }
 +
}
 +
 +
b = Thread.new {
 +
  semaphore.synchronize {
 +
    # access shared resource
 +
  }
 +
}
 +
</syntaxhighlight>
  
 
==توابع الصنف العامة (Public Class Methods)==
 
==توابع الصنف العامة (Public Class Methods)==
===[[Ruby/Mutex/new | التابع new]]===
+
===[[Ruby/Mutex/new | <code>new</code>]]===
ينشئ كائن جديدًا من النوع <code>Mutex</code>
+
ينشئ كائنًا جديدًا من النوع <code>Mutex</code>.
===[[Ruby/Mutex/lock | التابع lock]]===
+
 
يحاول  مسك القفل (grab the lock)، وينتظر إذا لم يكن متاحًا. يطلق الخطأ <code>ThreadError</code> إذا تم تأمين <code>mutex</code> من قبل المهمة الفرعية (thread) الحالي.
+
== توابع النسخة العامة (Public Instance Methods) ==
===[[Ruby/Mutex/locked-3F | التابع locked?]]===
+
 
يعيد  القيمة <code>true</code> إن كان هذا القفل ممسوكًا حاليًا من قبل مهمة فرعية (thread) ما.
+
===[[Ruby/Mutex/lock | <code>lock</code>]]===
===[[Ruby/Mutex/owned-3F | التابع owned?]]===
+
يحاول  مسك القفل (grab the lock)، وينتظر إذا لم يكن متاحًا.  
يعيد  القيمة <code>true</code> إن كان هذا القفل ممسوكًا حاليًا من قبل المهمة الفرعية (thread) الحالية.
+
===[[Ruby/Mutex/locked-3F | <code>locked?‎</code>]]===
===[[Ruby/Mutex/sleep | التابع sleep]]===
+
يتحقق إن كان هذا القفل مُطبَّق حاليًا من قبل خيط (thread) ما.
يحرر القفل وينام لمدة <code>timeout</code> ثانية إذا تم تمريره وكانت قيمته تخالف nil أو forever.  يطلق الخطأ <code>ThreadError</code> إذا لم يتم تأمين <code>mutex</code> من قبل المهمة الفرعية (thread) الحالي.
+
===[[Ruby/Mutex/owned-3F | <code>owned?‎</code>]]===
===[[Ruby/Mutex/synchronize | التابع synchronize]]===
+
يتحقق إن كان هذا القفل (lock) مُطبَّق حاليًا من قبل الخيط (thread) الحالي.
يحصل  على القفل (lock)، وينفذ الكتلة المعطاة، ثم يحرر القفل عند اكتمال تنفيذ الكتلة.  انظر المثال تحت <code>Mutex</code>.
+
===[[Ruby/Mutex/sleep | <code>sleep</code>]]===
===[[Ruby/Mutex/try_lock | التابع try_lock]]===
+
يحرر القفل (lock)، وينام لعدد محدَّد من الثواني. 
يحاول الحصول على القفل (lock) والعودة على الفور. حيث يعيد <code>true</code> إذ أُمِّن القفل.
+
===[[Ruby/Mutex/synchronize | <code>synchronize</code>]]===
===[[Ruby/Mutex/unlock | التابع unlock]]===
+
يطبِّق القفل (lock) وينفذ الكتلة المعطاة، ثم يحرر القفل عند اكتمال تنفيذ الكتلة.  
يحرر القفل. ويطلق الاستثناء <code>ThreadError</code> إذا لم يتم تأمين <code>mutex</code> من قبل المهمة الفرعية (thread) الحالية.
+
===[[Ruby/Mutex/try_lock | <code>try_lock</code>]]===
 +
يحاول الحصول على القفل (lock) والعودة مباشرةً، إذ يعيد القيمة <code>true</code> إن كان القفل مؤمنًا (granted).
 +
===[[Ruby/Mutex/unlock | <code>unlock</code>]]===
 +
يحرر القفل (lock).
  
 
==مصادر<span> </span>==
 
==مصادر<span> </span>==
*[http://ruby-doc.org/core-2.5.1/LocalJumpError.html قسم الصنف Mutex في توثيق روبي الرسمي.]
+
*[http://ruby-doc.org/core-2.5.1/Mutex.html قسم الصنف Mutex في توثيق روبي الرسمي.]
<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>Mutex</code> في روبي}}</noinclude>
+
<noinclude>{{DISPLAYTITLE:الصنف <code>Mutex</code> في روبي}}</noinclude>
 
[[تصنيف: Ruby]]
 
[[تصنيف: Ruby]]
 +
[[تصنيف: Ruby Class]]
 
[[تصنيف: Ruby Mutex]]
 
[[تصنيف: Ruby Mutex]]

المراجعة الحالية بتاريخ 05:55، 20 نوفمبر 2018

يمكن استخدام الصنف Mutex وكائناته كواجهة لتنسيق الوصول إلى البيانات المشتركة من عدة خيوط (threads) موجودة وتعمل في نفس الوقت. إليك هذا المثال:

semaphore = Mutex.new

a = Thread.new {
  semaphore.synchronize {
    # access shared resource
  }
}

b = Thread.new {
  semaphore.synchronize {
    # access shared resource
  }
}

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

new

ينشئ كائنًا جديدًا من النوع Mutex.

توابع النسخة العامة (Public Instance Methods)

lock

يحاول مسك القفل (grab the lock)، وينتظر إذا لم يكن متاحًا.

locked?‎

يتحقق إن كان هذا القفل مُطبَّق حاليًا من قبل خيط (thread) ما.

owned?‎

يتحقق إن كان هذا القفل (lock) مُطبَّق حاليًا من قبل الخيط (thread) الحالي.

sleep

يحرر القفل (lock)، وينام لعدد محدَّد من الثواني. 

synchronize

يطبِّق القفل (lock) وينفذ الكتلة المعطاة، ثم يحرر القفل عند اكتمال تنفيذ الكتلة.

try_lock

يحاول الحصول على القفل (lock) والعودة مباشرةً، إذ يعيد القيمة true إن كان القفل مؤمنًا (granted).

unlock

يحرر القفل (lock).

مصادر