Junior
Мьютекс (mutex) дегеніміз не?
sobes.tech AI
AI-дан жауап
Мьютекс (mutex, Mutual Exclusion) — бұл синхрондау механизмі, ол бірнеше ағындар (немесе процестер) бір уақытта жалпы ресурсты қорғау үшін пайдаланылады. Әр уақытта тек бір ағын мьютекске ие бола алады және сәйкесінше, оған қорғалған ресурсты пайдалана алады.
Мьютекспен негізгі операциялар:
- lock (тұтқалау): Мьютекске иелік етуге тырысу. Егер мьютекс бос болса, ағын оны алады да, орындалуды жалғастырады. Егер мьютекс басқа ағынмен already алынған болса, ағымдағы ағын тоқтайды, мьютекс босатылғанша.
- 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 жағдайларын болдырмайды және параллель қол жеткізу кезінде деректердің тұтастығын қамтамасыз етеді. Мьютекстерді дұрыс қолданбау deadlock-қа әкелуі мүмкін.