რა ტიპის მუტექსები არსებობს C++ სტანდარტულ ბიბლიოთეკაში?
sobes.tech AI
პასუხი AI-სგან
C++ სტანდარტული ბიბლიოთეკაში (C++11-დან) განსაზღვრულია შემდეგი ტიპის mutex-ები:
-
std::mutex: ძირითადი, არარეკურსიული mutex. თემა, რომელიც მას ფლობს, ვერ შეძლებს მის ხელში ჩაგდებას ისევ, სანამ არ გაათავისუფლებს. მცდელობა მისი ხელახლა ხელში ჩაგდების იგივე თემიდან გამოიწვევს გაურკვეველ ქცევას. -
std::recursive_mutex: რეკურსიული mutex. საშუალებას აძლევს ერთ თემას, რომ ის რამდენჯერმე დაატყვევოს იგი. ტყვეობის და გათავისუფლების რაოდენობა უნდა ემთხვეოდეს, რათა mutex იყოს ხელმისაწვდომი სხვა თემებისთვის. ზრდის ხარჯებსstd::mutex-თან შედარებით. -
std::timed_mutex: იგივეა, რაცstd::mutex, მაგრამ აქვს შესაძლებლობა, სცადოს მისი დაპყრობა დროის შეზღუდვით (try_lock_for,try_lock_until). სასარგებლოა გარკვეულ შემთხვევებში ურთიერთბლოკვების თავიდან ასაცილებლად. -
std::recursive_timed_mutex: კომბინაციაstd::recursive_mutexდაstd::timed_mutex-ის, რომელიც საშუალებას აძლევს რეკურსიულად დაპყრობას დროის შეზღუდვით.
std::shared_mutex (C++17-დან) არის მუტექსი, რომელიც უზრუნველყოფს გაზიარებულ წვდომას (კითხვა/დაწერა), მაგრამ ის არ მიეკუთვნება ძირითადი "ტიპების" მუტექსებს იგივე მნიშვნელობით, როგორც ზემოთ ჩამოთვლილი, თუმცა გამოიყენება რესურსებზე წვდომის სინქრონიზაციისთვის. იგი საშუალებას აძლევს მრავალ თემას ერთდროულად კითხულს, მაგრამ მხოლოდ ერთ თემას შეუძლია დაწერა.