ما هو سيمافور في جافا وكيفية استخدامه؟
نشرت: 2022-05-26قامت شركة Sun Microsystems في عام 1995 بإحضار Java إلينا ، والتي كانت لغة برمجة تعاونية تعتمد على الفصل والكائن ومنصة كمبيوتر. لن يعمل عدد هائل من البرامج والمواقع الإلكترونية إلا إذا قمت بتثبيت Java ، ويتم تطوير المزيد بشكل يومي. يتم تسويق Java والإشادة بسرعتها وأمانها وموثوقيتها. إنها لغة كمبيوتر تم إنشاؤها خصيصًا للاستخدام في عالم الإنترنت المشتت. تم وضعه مع الأخذ في الاعتبار تصميم لغة البرمجة C ++ ، ولكن من الأسهل استخدام وفرض نهج برمجة موجه للكائنات.
يعلمك برنامج PG التنفيذي في تطوير البرمجيات بالضبط جميع المهارات اللازمة للتميز في Java .
مثال على سيمافور:
مشترك var mutex: semaphore = 1 ؛
عملية ط
يبدأ
.
.
P (كائن المزامنة) ؛
تنفيذ CS ؛
الخامس (كائن المزامنة) ؛
.
.
نهاية؛
ما الذي يميز Java؟
قام مجتمع مخلص من مطوري Java والمهندسين المعماريين والمتحمسين باختبار Java وصقلها وتوسيعها والتحقق من صحتها. على الرغم من جذورها التي تعود إلى ما يقرب من عقدين من الزمن ، تطورت Java بشكل مطرد على مر السنين.
تهدف Java إلى تسهيل تطوير برامج محمولة عالية الأداء لمجموعة واسعة من أنظمة الكمبيوتر ، وبالتالي دعم المفاهيم الأساسية لتشمل إمكانية الوصول والتفاعل عبر الأنظمة الأساسية. يمكن للشركات تقديم خدمات إضافية ، وزيادة إنتاجية المستخدم النهائي ، والتواصل ، والتعاون ، وخفض تكلفة تطبيقات المؤسسات والمستهلكين بشكل كبير من خلال إتاحتها عبر إعدادات غير متجانسة.
ما هو سيمافور في جافا؟
تستخدم الإشارة عدادًا لتنظيم الوصول إلى مورد مشترك. يُسمح بالوصول إذا كان العداد أكبر من الصفر. إذا كانت القيمة 0 ، فسيتم رفض الوصول. تصاريح حسابات العداد التي توفر الوصول إلى المورد المشترك. نتيجة لذلك ، للوصول إلى المورد ، يجب أن يحصل مؤشر الترابط أولاً على إذن من الإشارة.
كيف يعمل؟
بشكل عام ، أثناء استخدام الإشارة ، يحاول مؤشر الترابط الذي يحاول الوصول إلى المورد المشترك الحصول على إذن. إذا كان عدد الإشارات أكبر من الصفر ، يحصل مؤشر الترابط على إذن ، مما يؤدي إلى تفكك عدد الإشارات. إذا لم يكن الأمر كذلك ، فسيتم إيقاف الخيط حتى يتم الحصول على تصريح.
عندما لا يتطلب مؤشر الترابط الوصول إلى المورد المشترك ، فإنه يطلق التصريح ، مما يؤدي إلى زيادة عدد الإشارات. إذا كان هناك مؤشر ترابط آخر ينتظر الإذن ، فسيحصل هذا الخيط على واحد في تلك اللحظة.
أنواع السيمافور
هناك أربعة أنواع من السيمافور في جافا. وهم على النحو التالي:
إشارة ثنائية :
لا تقبل الإشارة الثنائية إلا 0 و 1 كقيم وتستخدم لإنشاء استبعاد متبادل ومزامنة الأنشطة المتزامنة.
مثال على ثنائي Semaphore:
فئة عامة BinarySemaphoreExample
{
منطقي خاص مغلق = خطأ ؛
BinarySemaphore (أولي int)
{
مغلق = (الأولي == 0) ؛
}
يطرح waitForNotify () الفراغ المتزامن العام InterruptException
{
بينما (مغلق)
{
انتظر()؛
}
مقفل = صحيح ؛
}
إعلام باطل متزامن عام ()
{
إذا (مغلق)
{
يخطر () ؛
}
مقفل = خطأ ؛
}
}
اقرأ مقالاتنا الشهيرة المتعلقة بتطوير البرمجيات
كيف يتم تنفيذ تجريد البيانات في Java؟ | ما هي الطبقة الداخلية في جافا؟ | معرفات Java: التعريف والنحو والأمثلة |
فهم التغليف في OOPS بأمثلة | شرح حجج سطر الأوامر في لغة سي | أهم 10 ميزات وخصائص للحوسبة السحابية في عام 2022 |
تعدد الأشكال في جافا: المفاهيم والأنواع والخصائص والأمثلة | الحزم في Java وكيفية استخدامها؟ | برنامج Git التعليمي للمبتدئين: تعلم Git من الصفر |
عد الإشارة :
في كل لحظة من الزمن ، تمثل قيمة إشارة العد الحد الأقصى لعدد العمليات التي يمكنها الوصول إلى المنطقة الحرجة في نفس الوقت.
مثال على عد الإشارة:
فئة عامة CountSemaphoreExample
{
إشارة int الخاصة = 0 ؛
أخذ الفراغ المتزامن العام ()
{
this.signal ++ ؛
this.notify () ؛
}
يطرح الإصدار العام المتزامن من الفراغ المتزامن () InterruptException
{
بينما (هذه الإشارة == 0)
انتظر()؛
this.signal- ؛
}
}
Timed Semaphore:
تتيح الإشارات الموقوتة تشغيل مؤشر ترابط لفترة زمنية محددة. بعد فترة معينة ، يتم إعادة تعيين المؤقت ويتم تحرير جميع التصاريح الأخرى.
مثال على إشارة موقوتة:
فئة TimedSemaphoresExample
{
إشارة TimedSemaphore الخاصة ؛
TimedSemaphoreExample (فترة طويلة ، int slotLimit)
{
إشارة = TimedSemaphore جديدة (فترة ، TimeUnit.SECONDS ، slotLimit) ؛
}
محاولة منطقية
{
إرجاع semaphore.tryAcquire () ،
}
عدد int availableSlots ()
{
إرجاع semaphore.getAvailablePermits () ،
}
}
يحدها سيمافور :
يمكننا تعيين الحد الأعلى باستخدام إشارات محددة. يتم استخدامه بدلاً من حساب الإشارات نظرًا لعدم وجود قيمة حد عليا لها. تمثل قيمة الحد الأعلى الحد الأقصى لعدد الإشارات التي يمكن تخزينها.
مثال على إشارة محددة :
فئة عامة BoundedSemaphoresExample
{
إشارات int الخاصة = 0 ؛
حد int خاص = 0 ؛
public BoundedSemaphoreexample (int upperBound)
{
this.bound = upperBound ؛
}
تزامن الفراغ العام يأخذ () رميات InterruptException
{
بينما (هذه الإشارات == ملزمة)
انتظر()؛
this.signals ++ ؛
this.notify ++ ؛
}
يطرح الإصدار المتزامن الفراغ العام () InterruptException
{
بينما (هذه الإشارة == 0)
انتظر()؛
this.signals- ؛
}
}
استكشف دوراتنا التدريبية الشهيرة في هندسة البرمجيات
SL. رقم | برامج تطوير البرمجيات | |
1 | ماجستير العلوم في علوم الكمبيوتر من جامعة جون مورس بليفربول و IIITB | برنامج شهادة الأمن السيبراني من معهد كاليفورنيا للتكنولوجيا CTME |
2 | برنامج تدريب تطوير المكدس الكامل | برنامج PG في Blockchain |
3 | برنامج الدراسات العليا التنفيذية في تطوير البرمجيات - تخصص في DevOps | عرض جميع دورات هندسة البرمجيات |
صفات:
تتميز الإشارة بالخصائص التالية:
- يسمح للخيوط بالتواصل مع بعضها البعض.
- يقلل من درجة التزامن. نتيجة لذلك ، فإنه يوفر طريقة مزامنة منخفضة المستوى.
- لا توجد قيمة سالبة في الإشارة. لها قيمة يمكن أن تكون أكبر من أو تساوي الصفر.
- يمكننا تنفيذ السيمافور باستخدام العملية التجريبية والمقاطعات وتنفيذها باستخدام واصفات الملفات.
إيجابيات وسلبيات Semaphores:
مزايا:
- تمكن العديد من الخيوط من الوصول إلى الجزء الحيوي.
- الإشارات غير مقيدة بالآلة.
- يتم تنفيذ Semaphores في كود microkernel المستقل عن الآلة.
- غير مسموح بعمليات متعددة للوصول إلى القسم الحاسم.
- لا يوجد إهدار لوقت العملية أو الموارد نظرًا لوجود انتظار مشغول دائمًا في السيمافور.
- إنها مستقلة عن الآلة وبالتالي يجب تشغيلها في كود microkernel المستقل عن الآلة.
- أنها تمكن إدارة الموارد التي تكون قابلة للتكيف.
سلبيات:
- يعد انعكاس الأولوية أحد أهم قيود الإشارة.
- يجب أن يتتبع نظام التشغيل جميع مكالمات الانتظار والإشارة.
- لم يتم إجبارهم على الإطلاق ، ولكن ببساطة عن طريق التقاليد.
- يجب تنفيذ إجراءات الانتظار والإشارة بشكل صحيح لتجنب حالات الجمود في الإشارة.
- نظرًا لأن برمجة السيمافور معقدة ، فهناك احتمال ألا يتحقق الاستبعاد المتبادل.
- كما أنها ليست استراتيجية واقعية للتطبيقات واسعة النطاق لأنها تؤدي إلى فقدان نمطية.
- سيمافور أكثر عرضة لأخطاء البرمجة.
- قد يؤدي خطأ البرمجة إلى مأزق أو انتهاك الاستبعاد المتبادل.
كيفية استخدام سيمافور كقفل؟
يمكن استخدام الإشارة كقفل في Java. إنه يدل على أنه يقيد الوصول إلى المورد. للحصول على القفل ، يجب أن يقوم أي مؤشر ترابط يريد الوصول إلى المورد المقفل باستدعاء وظيفة الاستحواذ () أولاً. بعد الانتهاء من العمل ، يجب أن يحرر الخيط القفل عن طريق استدعاء وظيفة release (). ضع في اعتبارك أنه يجب تعيين الحد الأعلى على 1. ستساعدك دورة PG التنفيذية في التطوير الشامل على إتقان كل هذه المهارات.
ملخص
إن امتلاك فكرة واضحة عن لغات البرمجة مثل Java أمر ضروري لمهنة مشرقة كمطور برامج. تقدم upGrad العديد من الدورات التدريبية التي قد تمنحك الركلة الصحيحة لمهنة واعدة. سيعلمك التخصص في التطوير الكامل من جامعة Purude في upGrad جميع المهارات التي تحتاجها لتزدهر في مجال تطوير البرمجيات.
تعلم دورات تطوير البرمجيات عبر الإنترنت من أفضل الجامعات في العالم. اربح برامج PG التنفيذية أو برامج الشهادات المتقدمة أو برامج الماجستير لتتبع حياتك المهنية بشكل سريع.
لماذا نحتاج سيمافور في جافا؟
السيمافور هو متغير يستخدم لمزامنة العملية لإدارة العمليات المتزامنة. كما أنه يمنع مشكلة العرق من خلال التحكم في الوصول إلى مورد مشترك من خلال عدة عمليات متزامنة.
لماذا نحتاج عد سيمافور؟
غالبًا ما تُستخدم الإشارات لتنسيق الوصول إلى الموارد ، مع تعيين عدد الإشارات على قائمة إجمالي الموارد. عندما تُعطى الموارد أو تُضاف ، تزيد الخيوط العدد ذريًا ، وعندما تُسحب الموارد ، تقلل الخيوط العدد بشكل ذري.
لماذا يُعرف سيمافور بأداة التزامن؟
سيمافور هو في الأساس متغير عدد صحيح يتقاسمه العديد من الخيوط. يتم استخدام هذا المتغير في بيئة المعالجة المتعددة للتغلب على مشكلة القسم الحرج وإنشاء مزامنة العملية. يشار إلى هذا أحيانًا باسم قفل كائن المزامنة (mutex lock).
ما هو تطوير المكدس الكامل؟
تطوير المكدس الكامل هو إنشاء كل من مكونات الواجهة الأمامية (جانب العميل) والنهاية الخلفية (من جانب الخادم) لتطبيق الويب. يمكن لمطوري الويب المكدسين إنشاء تطبيقات ومواقع إلكترونية كاملة. إنهم مسؤولون عن الواجهة الأمامية والخلفية وقاعدة البيانات وتصحيح أخطاء التطبيقات أو مواقع الويب عبر الإنترنت.