Junior — Middle
123
Жолдарды синхрондауда өзара блоктау механизмі (mutex) мен шартты айнымалы (Condition Variable) арасындағы айырмашылық неде?
Сұралған компаниялар
AI-дан жауап
sobes.tech AI
Mutex (өзара блоктау) — бұл синхрондау префиксі, ол ресурсқа эксклюзивті қол жеткізуді қамтамасыз етеді: әр уақытта тек бір ағын mutex-ке ие болып, қорғалған деректермен жұмыс істей алады.
Condition Variable (жағдай айнымалысы) — бұл механизм, ол ағынға белгілі бір шарттың орындалуын күтуді мүмкіндік береді және сол уақытта mutex-ті босатады, басқа ағындар жағдайды өзгерте алады, содан кейін күтуші ағын оянады.
Негізгі айырмашылықтар:
- Mutex ресурсқа қол жеткізуді блоктайды, критикалық бөлімнің бір уақытта орындалуын болдырмайды.
- Condition Variable ағындар арасында күтуді және хабарлауды ұйымдастыру үшін пайдаланылады, бір ағын шарттың орындалуын күтсе, екіншісі оны хабарлайды.
Қолдану мысалы:
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
// Тұтынушы ағыны
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return ready; }); // ready == шын болғанша күтеді
// ояна салысымен жұмысын жалғастырады
// Өндіруші ағыны
{
std::lock_guard<std::mutex> guard(mtx);
ready = true;
}
cv.notify_one(); // тұтынушыға сигнал береді
Осылайша, mutex қол жеткізуді бақылайды, ал condition variable ағындардың өзара әрекеттесуін күтуді және хабарлауды үйлестіреді.