Junior
Mutex nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Muteks (Mutual Exclusion) sinxronizasiya mexanizmidir və çoxlu axınlar (və ya proseslər) tərəfindən ümumi resursun eyni vaxtda əldə edilməsinin qarşısını almaq üçün istifadə olunur. Hər an yalnız bir axın muteksi ələ keçirə və qorunan resursa daxil ola bilər.
Muteks ilə əsas əməliyyatlar:
- lock (kilidləmə): Muteksi əldə etməyə cəhd. Əgər muteks boşdursa, axın onu ələ keçirir və icraata davam edir. Əgər artıq başqa bir axın tərəfindən istifadə olunursa, cari axın bloklanır və muteks azad olunana qədər gözləyir.
- unlock (açma): Muteksi azad etmək. Bu, gözləyən digər axına onu ələ keçirməyə imkan verir. Vacibdir ki, muteksi onu ələ keçirən eyni axın azad etsin.
Məsələn, Objective-C və ya Swift-də NSLock istifadə edilə bilər.
Objective-C-də NSLock istifadə nümunəsi:
// 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]; // Muteksi kilidlə
@try {
// _sharedResource ilə işləyirik - kritik bölmə
_sharedResource++;
NSLog(@"Paylaşılan resurs yeniləndi: %d, axın: %@", _sharedResource, [NSThread currentThread]);
}
@finally {
[_lock unlock]; // Muteksi aç
}
}
@end
Swift-də NSLock istifadə nümunəsi:
// Swift
import Foundation
class MyClass {
private let lock = NSLock()
private var sharedResource = 0
func updateSharedResource() {
lock.lock() // Muteksi kilidlə
// sharedResource ilə işləyirik - kritik bölmə
sharedResource += 1
print("Paylaşılan resurs yeniləndi: \(sharedResource), axın: \(Thread.current)")
lock.unlock() // Muteksi aç
}
}
Muteksler yarış şəraitini (race condition) qarşısını alır və paralel giriş zamanı məlumatların bütövlüyünü təmin edir. Yanlış istifadə deadlock-lara səbəb ola bilər.