Sobes.tech
Junior

რა არის mutex (mutex)?

sobes.tech AI

პასუხი AI-სგან

Մյուտեքս (mutex, Mutual Exclusion) — սա սինխրոնիզացիայի մեխանիզմ է, որը օգտագործվում է ընդհանուր ռեսուրսը պաշտպանելու համար միաժամանակյա մուտքից մի քանի հոսքերից (կամ պրոցեսներից): Յուրաքանչյուր ժամանակ միայն մեկ հոսք կարող է տիրապետել մյուտեքսին և համապատասխանաբար ստանալ մուտք դեպի պաշտպանված ռեսուրսը:

Հիմնական գործողությունները մյուտեքսի հետ՝

  • lock (կապ): Փորձել ստանալ մյուտեքսի տիրապետությունը: Եթե մյուտեքսը ազատ է, հոսքը այն գրավում է և շարունակում է գործել: Եթե մյուտեքսը արդեն զբաղված է այլ հոսքի կողմից, ընթացիկ հոսքը բլոկվում է մինչև մյուտեքսը ազատվի:
  • unlock (ազատում): Մյուտեքսի տիրապետության ազատում: Սա թույլ է տալիս մյուս սպասող հոսքին այն գրավել: Կարևոր է, որ մյուտեքսը ազատվի նույն հոսքը, որը նրան է գրավել:

Օրինակ՝ Objective-C կամ Swift-ում մյուտեքսների հետ աշխատելու համար կարելի է օգտագործել NSLock:

Objective-C-ում NSLock-ի օգտագործման օրինակ՝

//  Objective-C
#import <Foundation/Foundation.h>

@interface MyClass : NSObject {
    NSLock *_lock;
    int _sharedResource;
}
@end

@implementation MyClass

- (instancetype)init {
    self = [super init];
    if (self) {
        _lock = [[NSLock alloc] init];
        _sharedResource = 0;
    }
    return self;
}

- (void)updateSharedResource {
    [_lock lock]; // Մյուտեքսի գրավում
    @try {
        // Աշխատանք _sharedResource-ով՝ կարիքային հատված
        _sharedResource++;
        NSLog(@"Shared resource updated to %d by thread %@", _sharedResource, [NSThread currentThread]);
    }
    @finally {
        [_lock unlock]; // Մյուտեքսի ազատում
    }
}

@end

Swift-ում NSLock-ի օգտագործման օրինակ՝

//  Swift
import Foundation

class MyClass {
    private let lock = NSLock()
    private var sharedResource = 0

    func updateSharedResource() {
        lock.lock() // Մյուտեքսի գրավում
        // Աշխատանք sharedResource-ով՝ կարիքային հատված
        sharedResource += 1
        print("Shared resource updated to \(sharedResource) by thread \(Thread.current)")
        lock.unlock() // Մյուտեքսի ազատում
    }
}

Մյուտեքսները կանխում են մրցակցության վիճակը (race condition) և ապահովում տվյալների ամբողջականությունը միաժամանակյա մուտքի դեպքում: Անպատշաճ օգտագործումը կարող է հանգեցնել մեխանիզմների միմյանց վրա փակվելու (deadlocks):