Avatar ·

مكافئ @synchronized من Objective-C في Swift: مزامنة صحيحة للخيوط

مرحباً بالجميع! لقد انتقلت مؤخراً من Objective-C إلى Swift وواجهت مشكلة في مزامنة الوصول إلى البيانات المشتركة من خيوط مختلفة. في Objective-C كنت معتاداً على استخدام بناء بسيط: ```objc @synchronized(self) { // قسم حرج self.someProperty = newValue; } ``` كان يضمن أن خيطاً واحداً فقط ينفذ الكود داخل الكتلة في نفس الوقت. في Swift لا يوجد هذا التركيب. أعلم أن في Swift هناك GCD (Grand Central Dispatch)، لكنني لست متأكداً من كيفية تنظيم المزامنة بشكل صحيح. المشكلة: لدي class للـ cache يتم الوصول إليه من عدة خيوط. إليك نسخة مبسطة: ```swift class Cache { private var storage: [String: Any] = [:] func set(value: Any, forKey key: String) { storage[key] = value } func get(forKey key: String) -> Any? { return storage[key] } } ``` عند الوصول المتزامن من عدة خيوط، يحدث سباق بيانات (data race). كيف يمكن تنفيذ