Sobes.tech
Junior — Middle

Կարող է փոխանցել string տիպի օբյեկտ որպես սինխրոնիզացիայի բլոկավորման մեխանիզմ?

sobes.tech AI

Պատասխան AI-ից

C#-да string տիպի օբյեկտը որպես փակման մեխանիզմ (lock) օգտագործելը խորհուրդ չի տրվում: Պատճառը այն է, որ տողերը անփոփոխ և ներմուծված (interned) օբյեկտներ են, այսինքն, նույն տողային լիտերալները կարող են հղում ունենալ նույն օբյեկտին հիշողության մեջ:

Սա կարող է հանգեցնել անակնկալ փակմանների, եթե տարբեր ծրագրի մասեր օգտագործում են նույն տողային արժեքները սինխրոնիզացիայի համար, ինչը կարող է առաջացնել միմյանց փակման կամ նվազեցնել կատարողականությունը:

Լավ է օգտագործել մասնավոր օբյեկտ, որը հատուկ է փակման համար:

private readonly object _lockObj = new object();

public void SomeMethod()
{
    lock(_lockObj)
    {
        // քննադատական հատված
    }
}