Junior
Mutex nima?
sobes.tech AI
AIdan javob
Muteks (Mutual Exclusion) — bu, bir nechta oqim (yoki jarayonlar) tomonidan umumiy resursga bir vaqtning o'zida kirishni oldini olish uchun ishlatiladigan sinxronizatsiya mexanizmi. Har bir vaqtda faqat bitta oqim muteksni egallashi mumkin va shuning uchun himoyalangan resursga kirish huquqiga ega bo'ladi.
Muteks bilan asosiy operatsiyalar:
- lock (bloklash): Muteksni egallashga urinish. Agar muteks bo'sh bo'lsa, oqim uni egallaydi va bajarishni davom ettiradi. Agar muteks boshqa oqim tomonidan band bo'lsa, joriy oqim bloklanadi, muteks bo'shatilguncha.
- unlock (ochish): Muteksni bo'shatish. Bu kutayotgan boshqa oqimga uni egallash imkonini beradi. Muhim nuqta shundaki, muteksni uni egallagan oqim bo'shata oladi.
Misol uchun, Objective-C yoki Swiftda NSLock yordamida mutekslar bilan ishlash mumkin.
Objective-Cda NSLockdan foydalanish misoli:
// 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]; // Muteksni bloklash
@try {
// _sharedResource bilan ishlash - kritik bo'lim
_sharedResource++;
NSLog(@"Umumiy resurs yangilandi: %d, oqim: %@", _sharedResource, [NSThread currentThread]);
}
@finally {
[_lock unlock]; // Muteksni ochish
}
}
@end
Swiftda NSLockdan foydalanish misoli:
// Swift
import Foundation
class MyClass {
private let lock = NSLock()
private var sharedResource = 0
func updateSharedResource() {
lock.lock() // Muteksni bloklash
// sharedResource bilan ishlash - kritik bo'lim
sharedResource += 1
print("Umumiy resurs yangilandi: \(sharedResource), oqim: \(Thread.current)")
lock.unlock() // Muteksni ochish
}
}
Mutekslar raqobat shartlarini (race condition) oldini oladi va parallel kirishlarda ma'lumotlarning yaxlitligini ta'minlaydi. Noto'g'ri foydalanish deadlocklarga olib kelishi mumkin.