Kādi mutex veidi pastāv C++ standarta bibliotēkā?
sobes.tech AI
Atbilde no AI
Standarta C++ bibliotēkā (no C++11) ir definēti šādi mutexu veidi:
-
std::mutex: Pamatveids, nerecursīvs mutex. Šūnu, kurš to pārvalda, to nevar atkārtoti iegūt bez iepriekšējas atbrīvošanas. Mēģinājums to atkārtoti iegūt tajā pašā šūnā noved pie nenoteiktas uzvedības. -
std::recursive_mutex: Rekursīvs mutex. Atļauj vienam šūnam to iegūt vairākas reizes. Iegūšanas un atbrīvošanas skaits ir jāatbilst, lai mutex būtu pieejams citiem šūniem. Palielina izmaksas salīdzinājumā arstd::mutex. -
std::timed_mutex: Tāds pats kāstd::mutex, bet ar iespēju mēģināt to iegūt ar laika ierobežojumu (try_lock_for,try_lock_until). Noderīgs, lai novērstu savstarpējas bloķēšanas gadījumus. -
std::recursive_timed_mutex:std::recursive_mutexunstd::timed_mutexapvienojums, kas ļauj rekursīvi iegūt ar laika ierobežojumu.
std::shared_mutex (no C++17) ir mutex ar kopīgu piekļuvi (lasīšana/rakstīšana), bet tas nepieder pie pamattipiem mutexu nozīmē, kā tas ir iepriekš minēts, lai gan tas tiek izmantots resursu piekļuves sinhronizācijai. Tas ļauj vairākiem šūniem lasīt vienlaikus, bet tikai vienam šūnam rakstīt.