تخطَّ إلى المحتوى

System.Threading.Lock

نوع القفل الجديد (Lock) System.Threading.Lock

منذ .NET 9 / C# 13، نوع System.Threading.Lock الجديد يوفّر تزامنًا (synchronization) أسرع من Monitor التقليدي، ويتعرّف عليه المترجم تلقائيًا داخل جملة lock بلا تغيير في الصياغة.

جملة lock التقليدية في C# كانت تُترجَم دائمًا إلى استدعاءات System.Threading.Monitor خلف الكواليس، بغضّ النظر عن نوع الكائن المُقفَل. النوع الجديد System.Threading.Lock مصمَّم خصيصًا للتزامن بأداء أفضل. عندما يتعرّف المترجم على أن هدف lock هو من النوع Lock، يولّد كودًا يستخدم EnterScope بدل Monitor تلقائيًا — دون أي تغيير في صياغة جملة lock نفسها.

التحديث الوحيد المطلوب في كودك: تغيير نوع كائن القفل من object إلى Lock.

الصياغة

private readonly Lock _sync = new();

lock (_sync)
{
    // منطقة حرجة
}

📄 مثال

class Counter
{
    private readonly Lock _sync = new();
    private int _count;

    public void Increment()
    {
        lock (_sync)
        {
            _count++;
        }
    }
}

أهم النقاط

العنصرالوظيفة
System.Threading.Lockنوع قفل جديد مخصّص للتزامن، أسرع من Monitor
lock (lockObj)نفس الصياغة تمامًا — المترجم يختار API المناسبة حسب نوع lockObj
متوفّرة منذ.NET 9 / C# 13

💡 نصائح عملية

  • استبدل private readonly object _sync = new(); بـ private readonly Lock _sync = new(); للحصول على الفائدة بلا تغيير أي كود آخر

⚠️ أخطاء شائعة

  • تحويل كائن Lock إلى نوع آخر (مثل object) قبل استخدامه في lock — يفقد ميزة الأداء الجديدة ويعود المترجم لتوليد كود Monitor

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CSHARP الكامل بالعربي.