رفتن به محتوای اصلی
برنامه‌سازی پیشرفته با پایتون درس‌نامهٔ آزاد
مفهوم پیشرفته ۹ دقیقه

ریسه‌ها و قفل‌ها

چرخهٔ عمر ریسه، مسابقهٔ داده‌ای، Lock و قانونِ «کمترین حالت مشترک».

import threading

lock = threading.Lock()
balance = 0

def deposit(amount):
    global balance
    with lock:  # فقط یک ریسه در هر لحظه این‌جاست
        balance += amount

balance += amount سه قدم است (بخوان، جمع بزن، بنویس) و ریسه‌ها وسطِ قدم‌های هم می‌پرند — بدون قفل، افزایش‌ها گم می‌شوند. GIL نجاتت نمی‌دهد: GIL از درهم‌پریدنِ بایت‌کدها جلوگیری می‌کند، نه از منطقِ چندقدمیِ تو. و قفلِ بیشتر همیشه بهتر نیست: ترتیبِ وارونهٔ دو قفل در دو ریسه = بن‌بست (deadlock). راه‌حلِ ریشه‌ای: حالتِ مشترکِ کمتر (صف، پیام، دادهٔ محلیِ ریسه).

مطالب مرتبط

از همین بخش و با برچسب‌های مشترک

این مطلب را خواندید؟ آن را علامت بزنید تا پیشرفت شما روی همین دستگاه ذخیره شود.

وضعیت پیشرفت برای ریسه‌ها و قفل‌ها