"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > استخدام Mutex في Golang وشرح مفصل

استخدام Mutex في Golang وشرح مفصل

نشر في 2025-04-19
تصفح:263

أثناء تطوير LiveApi ، وهي أداة توليد توثيق API للسيارات ، كنت بحاجة إلى تنفيذ آلية قائمة انتظار قوية تم تحجيمها بناءً على عدد مراكز آلة الخادم. كان هذا أمرًا بالغ الأهمية لمنع استخدام الموارد المفرطة (الذاكرة ووحدة المعالجة المركزية) التي يمكن أن تؤدي إلى جوع الموارد ، والتعطل ، وتجربة المستخدم الضعيفة.

في هذه المقالة ، سأشرح كيف استخدمت Mutexes في Golang لمعالجة هذا التحدي.

ما هو mutex؟
في البرمجة المتزامنة ، يعد Mutex (الاستبعاد المتبادل) آلية قفل تمنع ظروف السباق من خلال ضمان أن Goroutine واحد فقط يمكنه الوصول إلى مورد مشترك في وقت واحد. إنه أقرب إلى مفتاح الغرفة - يمكن لشخص واحد فقط الاحتفاظ بالمفتاح والدخول مرة واحدة.

What is Mutex and How to Use it in Golang?

استخدام Mutex في Golang
دعونا نوضح كيف يمكن لـ Mutex إدارة تنفيذ الوظائف المتزامنة:
توفر حزمة Sync Go's العديد من البدائيات للمزامنة ، حيث تكون Mutex واحدة من أكثر الأدوات شيوعًا.

var (
    maxConcurrentJobs int
    activeJobs        int
    jobMutex          sync.Mutex
)

في هذا الرمز ، يتتبع متغير ActiveJobs عدد الوظائف التي تعمل حاليًا. نظرًا لأن العديد من goroutines قد تحاول تعديل هذا المتغير بشكل متزامن ، مما يؤدي إلى ظروف السباق ، فإننا نستخدم Mutex لمزامنة الوصول.

// Check if we can process more jobs
jobMutex.Lock()
if activeJobs >= maxConcurrentJobs {
    jobMutex.Unlock()
    // Wait before checking again
    time.Sleep(time.Second)
    continue
}
jobMutex.Unlock()

كيف يعمل mutex
Locking : تكتسب طريقة Lock () وصولًا حصريًا إلى القسم الحرج.

unlocking : طريقة Unlock () تطلق القفل.

القسم الحرج : الكود بين القفل وإلغاء القفل حيث يتم الوصول إلى المورد المشترك **.

أنواع mutexes في Golang
sync.mutex : هذا هو قفل الاستبعاد المتبادل الأساسي في GO. إنها تسمح فقط بوتين واحد للوصول إلى القسم الحرج في وقت واحد.

type SafeCounter struct {
    mu    sync.Mutex
    count int
}

sync.rwmutex : هذا قارئ/كاتب يسمح للقراء بالعديد من القراء للوصول إلى المورد المشترك في وقت واحد ، ولكن كاتب واحد فقط في وقت واحد.

var rwMutex sync.RWMutex
// Reader methods
rwMutex.RLock()   // Lock for reading
rwMutex.RUnlock() // Unlock for reading

// Writer methods
rwMutex.Lock()    // Lock for writing
rwMutex.Unlock()  // Unlock for writing

mutexes هي أدوات أساسية لإدارة الموارد المشتركة في برامج GO المتزامنة. أنها تمنع ظروف السباق وضمان سلامة البيانات من خلال التحكم في الوصول إلى الأقسام الحرجة من الكود.

بيان الافراج تتم إعادة طباعة هذه المقالة على: https://dev.to/lincemathew/what-is-mutex-and-how-to-use-it-in-golang 1m1i؟1 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفها.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3