حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش پایتون پروژه‌محور؛ قسمت سوم: شیءگرایی تا ساخت برنامه

قفل Lock در پایتون؛ هماهنگ کردن تردها

آموزش threading و ساخت رابط گرافیکی با Tkinter · 0٪

اگه دو ترد هم‌زمان یک دادهٔ مشترک رو بخونن و تغییر بدن، ممکنه یکی تغییر دیگه‌ای رو بپوشونه؛ به این وضعیت race condition می‌گیم. عملیات چندمرحله‌ای رو تنها به امید GIL یا چند اجرای موفق، امن فرض نکن. Lock در این مثال اجازه می‌ده بخش حساس در هر لحظه فقط دست یک ترد باشه. with lock حتی در صورت خطا قفل رو آزاد می‌کنه.

این کد آموزشی محلی هست و در مرورگر اجرا نمی‌شه؛ در اینجا نتیجهٔ تضمین‌شده رو پیش‌بینی کن.

import threading

counter = 0
lock = threading.Lock()

def count():
    global counter
    for _ in range(1000):
        with lock:
            counter += 1

threads = [threading.Thread(target=count) for _ in range(2)]
for thread in threads:
    thread.start()
for thread in threads:
    thread.join()
print(counter)

فعالیت شما

نقش Lock و join رو در نتیجهٔ دادهٔ مشترک تشخیص بده.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

فعالیت‌های این بخش به اشتراک فعال نیاز دارند. تهیهٔ اشتراک

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

گزینه‌های پیش‌بینی خروجی

  1. همیشه 1000
  2. 2000 بعد از پایان هر دو ترد
  3. همیشه صفر
  4. عدد تصادفی حتی با قفل و join