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

شمارندهٔ امن در چهار ریسه

چهار ریسه هر کدام ۱۰۰۰۰ بار شمارنده را زیاد می‌کنند؛ بدون قفل چه می‌شود و با قفل چه؟

صورت مسئله

چهار ریسه هر کدام ۱۰۰۰۰ بار شمارنده را زیاد می‌کنند؛ بدون قفل چه می‌شود و با قفل چه؟

مثال حل‌شده

شمارندهٔ هم‌روند

پیشرفته

صورت مسئله

چرا بدون قفل نتیجه کمتر از ۴۰۰۰۰ و هر بار متفاوت است؟

راه‌حل گام‌به‌گام

    ۴ گام باقی مانده
    import threading
    
    counter = 0
    lock = threading.Lock()
    
    def worker(n):
        global counter
        for _ in range(n):
            with lock:
                counter += 1
    
    threads = [threading.Thread(target=worker, args=(10_000,)) for _ in range(4)]
    for t in threads: t.start()
    for t in threads: t.join()
    print(counter)  # 40000

    مطالب مرتبط

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

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

    وضعیت پیشرفت برای شمارندهٔ امن در چهار ریسه