হ্যাঁ, পাইথন ডিকশনারি থ্রেড-সেফ (Thread-Safe)। আসলে পাইথনের সব বিল্ট-ইন ডেটা টাইপ থ্রেড-সেফ।
কারণ: GIL (Global Interpreter Lock)
CPython-এ GIL নিশ্চিত করে যে একবারে শুধু এক থ্রেড পাইথন বাইটকোড এক্সিকিউট করতে পারে। এটাই বিল্ট-ইন অপারেশনগুলো আটোমিক (atomic) করে তোলে।
কী অপারেশন আটোমিক
- একটি আইটেম আপডেট:
d[key] = value - একটি আইটেম রিড:
d[key] d.get(key),d.pop(key),del d[key]
সতর্কতা: কম্পাউন্ড অপারেশন নন-আটোমিক
# এটি থ্রেড-সেফ নয়!
if key not in d:
d[key] = compute_value() # Race condition সম্ভব
# সেফ: লক ব্যবহার করুন
import threading
lock = threading.Lock()
with lock:
if key not in d:
d[key] = compute_value()