Junior
Мьютекс (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) абалын алдын алат жана параллелдүү кирүүдө маалыматтын бүтүндүгүн камсыздайт. Туура эмес колдонуу deadlock (өз ара бөгөлүү) пайда кылышы мүмкүн.