Sobes.tech
Middle

რა ტიპის მუტექსები არსებობს 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-დან) არის მუტექსი, რომელიც უზრუნველყოფს გაზიარებულ წვდომას (კითხვა/დაწერა), მაგრამ ის არ მიეკუთვნება ძირითადი "ტიპების" მუტექსებს იგივე მნიშვნელობით, როგორც ზემოთ ჩამოთვლილი, თუმცა გამოიყენება რესურსებზე წვდომის სინქრონიზაციისთვის. იგი საშუალებას აძლევს მრავალ თემას ერთდროულად კითხულს, მაგრამ მხოლოდ ერთ თემას შეუძლია დაწერა.