Sobes.tech
Middle

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ā ar std::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_mutex un std::timed_mutex apvienojums, 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.