الـ mutex قفل يضمن الاستبعاد المتبادل (mutual exclusion) — خيط واحد فقط يمكنه امتلاكه ودخول المقطع الحرج المحمي في المرة الواحدة. والـ semaphore يعمّم هذا ليسمح بما يصل إلى N من الحائزين المتزامنين.
الـ mutex قفل يضمن الاستبعاد المتبادل (mutual exclusion) — خيط واحد فقط يمكنه امتلاكه ودخول المقطع الحرج المحمي في المرة الواحدة. والـ semaphore يعمّم هذا ليسمح بما يصل إلى N من الحائزين المتزامنين.
acquire() ينقص (يتوقّف عند 0)، وrelease() يزيد. الـ mutex هو في جوهره semaphore بـ N=1 لكن مع دلالات ملكية.lock = threading.Lock()
def transfer(a, b, amt):
with lock: # critical section — one thread at a time
a.balance -= amt
b.balance += amt
# Semaphore: cap concurrent DB connections at 10
sem = threading.Semaphore(10)
def query():
with sem: # up to 10 threads run this concurrently
db.execute(...)
with/RAII/defer ليكون التحرير تلقائيًا حتى عند الاستثناءات.هذه هي الأدوات اليومية لحماية الحالة المشتركة. الـ mutexes تُسلسل الوصول لمنع حالات التسابق؛ والـ semaphores تُخنق مجمّع موارد (اتصالات، تصاريح، حدود معدّل). واختيار الأداة الصحيحة وإبقاء المقاطع الحرجة قصيرة هو الفرق بين صحيح-وسريع وصحيح-لكن-بطيء.
مكتبة من أسئلة مقابلات تقنية المعلومات مع إجابات مفصّلة — من المبتدئ إلى المتقدم.
تبرع