الفرق بين المراجعتين ل"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 | التابع new]]===
ينشئ  كائن جديدًا من النوع <code>Mutex</code>
+
ينشئ  كائنا جديدًا من النوع <code>Mutex</code>
 +
 
 +
== توابع النسخة العامة (Public Instance Methods) ==
 +
 
 
===[[Ruby/Mutex/lock | التابع lock]]===
 
===[[Ruby/Mutex/lock | التابع lock]]===
يحاول  مسك القفل (grab the lock)، وينتظر إذا لم يكن متاحًا. يطلق الخطأ <code>ThreadError</code> إذا تم تأمين <code>mutex</code> من قبل المهمة الفرعية (thread) الحالي.
+
يحاول  مسك القفل (grab the lock)، وينتظر إذا لم يكن متاحًا.  
===[[Ruby/Mutex/locked-3F | التابع locked?]]===
+
===[[Ruby/Mutex/locked-3F | التابع locked?]]===
 
يعيد  القيمة <code>true</code> إن كان هذا القفل ممسوكًا حاليًا من قبل مهمة فرعية (thread) ما.
 
يعيد  القيمة <code>true</code> إن كان هذا القفل ممسوكًا حاليًا من قبل مهمة فرعية (thread) ما.
===[[Ruby/Mutex/owned-3F | التابع owned?]]===
+
===[[Ruby/Mutex/owned-3F | التابع owned?]]===
 
يعيد  القيمة <code>true</code> إن كان هذا القفل ممسوكًا حاليًا من قبل المهمة الفرعية (thread) الحالية.
 
يعيد  القيمة <code>true</code> إن كان هذا القفل ممسوكًا حاليًا من قبل المهمة الفرعية (thread) الحالية.
 
===[[Ruby/Mutex/sleep | التابع sleep]]===
 
===[[Ruby/Mutex/sleep | التابع sleep]]===
يحرر  القفل وينام لمدة <code>timeout</code> ثانية إذا تم تمريره وكانت قيمته تخالف nil أو forever.  يطلق الخطأ <code>ThreadError</code> إذا لم يتم تأمين <code>mutex</code> من قبل المهمة الفرعية (thread) الحالي.
+
يحرر  القفل وينام لمدة <code>timeout</code> ثانية.
 
===[[Ruby/Mutex/synchronize | التابع synchronize]]===
 
===[[Ruby/Mutex/synchronize | التابع synchronize]]===
يحصل  على القفل (lock)، وينفذ الكتلة المعطاة، ثم يحرر القفل عند اكتمال تنفيذ الكتلة.  انظر المثال تحت <code>Mutex</code>.
+
يحصل  على القفل (lock)، وينفذ الكتلة المعطاة، ثم يحرر القفل عند اكتمال تنفيذ الكتلة.  
 
===[[Ruby/Mutex/try_lock | التابع try_lock]]===
 
===[[Ruby/Mutex/try_lock | التابع try_lock]]===
يحاول  الحصول على القفل (lock) والعودة على الفور. حيث يعيد <code>true</code> إذ أُمِّن القفل.
+
يحاول  الحصول على القفل (lock) والعودة على الفور.
 
===[[Ruby/Mutex/unlock | التابع unlock]]===
 
===[[Ruby/Mutex/unlock | التابع unlock]]===
 
يحرر  القفل. ويطلق الاستثناء <code>ThreadError</code> إذا لم يتم تأمين <code>mutex</code> من قبل المهمة الفرعية (thread) الحالية.
 
يحرر  القفل. ويطلق الاستثناء <code>ThreadError</code> إذا لم يتم تأمين <code>mutex</code> من قبل المهمة الفرعية (thread) الحالية.
  
 
==مصادر<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 Mutex]]
 
[[تصنيف: Ruby Mutex]]

مراجعة 14:13، 27 أكتوبر 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?‎

يعيد القيمة true إن كان هذا القفل ممسوكًا حاليًا من قبل مهمة فرعية (thread) ما.

التابع owned?‎

يعيد القيمة true إن كان هذا القفل ممسوكًا حاليًا من قبل المهمة الفرعية (thread) الحالية.

التابع sleep

يحرر القفل وينام لمدة timeout ثانية.

التابع synchronize

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

التابع try_lock

يحاول الحصول على القفل (lock) والعودة على الفور.

التابع unlock

يحرر القفل. ويطلق الاستثناء ThreadError إذا لم يتم تأمين mutex من قبل المهمة الفرعية (thread) الحالية.

مصادر