الفرق بين المراجعتين لصفحة: «Ruby/Mutex»
< Ruby
لا ملخص تعديل |
لا ملخص تعديل |
||
سطر 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> | ||
== توابع النسخة العامة (Public Instance Methods) == | |||
===[[Ruby/Mutex/lock | التابع lock]]=== | ===[[Ruby/Mutex/lock | التابع lock]]=== | ||
يحاول مسك القفل (grab the lock)، وينتظر إذا لم يكن متاحًا | يحاول مسك القفل (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> ثانية | يحرر القفل وينام لمدة <code>timeout</code> ثانية. | ||
===[[Ruby/Mutex/synchronize | التابع synchronize]]=== | ===[[Ruby/Mutex/synchronize | التابع synchronize]]=== | ||
يحصل على القفل (lock)، وينفذ الكتلة المعطاة، ثم يحرر القفل عند اكتمال تنفيذ الكتلة | يحصل على القفل (lock)، وينفذ الكتلة المعطاة، ثم يحرر القفل عند اكتمال تنفيذ الكتلة. | ||
===[[Ruby/Mutex/try_lock | التابع try_lock]]=== | ===[[Ruby/Mutex/try_lock | التابع try_lock]]=== | ||
يحاول الحصول على القفل (lock) والعودة على الفور | يحاول الحصول على القفل (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/ | *[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) الحالية.