Ի՞նչ է մյուտեքսը (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):