Std نى چۈشىنىش: C ++ 17 دىن Shared_mutex
باھا
Mewayz Team
Editorial Team
C ++ 17
دىن std :: shared_mutex نى چۈشىنىش C ++ 17 دە تونۇشتۇرۇلغانstd :: shared_mutex ماس قەدەملىك ئىپتىدائىي بولۇپ ، كۆپ خىل تېمىنىڭ بىرلا ۋاقىتتا ئورتاقلىشىش (ئوقۇش) قۇلۇپىنى ساقلاپ ، يېزىش مەشغۇلاتىغا مەخسۇس كاپالەتلىك قىلىدۇ. ئۇ پروگرامما ئاچقۇچىلارغا ئۈچىنچى تەرەپ كۈتۈپخانىلىرى ياكى سۇپا مەخسۇس API لىرىغا يەتمەي تۇرۇپ ، ئوقۇرمەنلەرگە يازغۇچى قۇلۇپنى يولغا قويۇشنىڭ پاكىز ، ئۆلچەملىك يولىنى بېرىش ئارقىلىق زامانىۋى C ++ دىكى ئەڭ كۆپ ئۇچرايدىغان ماسلىشىش خىرىسلىرىنى ھەل قىلىدۇ.
زادى نېمە std :: shared_mutex ۋە نېمىشقا C ++ 17 گە قوشۇلدى؟
C ++ 17 دىن بۇرۇن ، ئوقۇرمەن-يازغۇچىنىڭ مەنىسىگە ئېھتىياجلىق پروگراممېرلار POSIX سىستېمىسىدىكى pthread_rwlock_t ياكى Windows دىكى SRWLOCK غا ئوخشاش سۇپا خاراكتېرلىك ھەل قىلىش ئۇسۇللىرىغا تايىنىشى كېرەك ئىدى ، ياكى ئۇلار Boost قاتارلىق ئۈچىنچى تەرەپ كۈتۈپخانىلارنى ئىشلىتەتتى. C ++ 17 ئۆلچەملىك كومىتېتى بۇ پەرقنى تونۇپ يەتتى ھەمدە بىۋاسىتە ھەل قىلىش ئۈچۈن ماۋزۇسىدا std :: shared_mutex نى تونۇشتۇردى.
يادرولۇق ئىدىيە بىۋاسىتە: نۇرغۇنلىغان رېئال دۇنيا پروگراممىلىرىدا سانلىق مەلۇماتلار يېزىلغانغا قارىغاندا كۆپ ئوقۇلىدۇ. ئۆلچەملىك std :: mutex بارلىق زىيارەتلەرنى تەرتىپكە سالىدۇ - ئوقۇشنى ئۆز ئىچىگە ئالىدۇ - بۇ زۆرۈر بولمىغان توسالغۇلارنى پەيدا قىلىدۇ. std :: shared_mutex ئىككى خىل قۇلۇپلاش ھالىتىنى پەرقلەندۈرۈش ئارقىلىق بۇ چەكلىمىنى بىكار قىلىدۇ:
- ھەمبەھىر (ئوقۇش) قۇلۇپ strong> -
lock_shared ()ئارقىلىق سېتىۋېلىندى. بىر نەچچە تېما بىرلا ۋاقىتتا ئۇنى تۇتالايدۇ ، بىرلا ۋاقىتتا ئوقۇشقا ماس كېلىدۇ. - ئالاھىدە (يېزىش) قۇلۇپ strong> -
قۇلۇپ ()ئارقىلىق ئېرىشكەن. بىرلا ۋاقىتتا پەقەت بىرلا تېما ساقلىيالايدۇ ، ئۇ تۇتۇلغاندا ئورتاق قۇلۇپ ئىشلىتىشكە بولمايدۇ. - std :: shared_lock - قۇرۇلۇشتىكى
lock_shared ()ۋەunlock_shared ()دەپ ئاتىلىدىغان RAII ئورالمىسى ، بايلىقنىڭ ئېقىپ كېتىشىنىڭ ئالدىنى ئالىدۇ. - std :: unique_lock / std :: lock_guard - مەخسۇس ھالەتتە ئىشلىتىلىدۇ ، يېزىش مەشغۇلاتىنىڭ تولۇق قوغدىلىشىغا ۋە بىخەتەر بولۇشىغا كاپالەتلىك قىلىدۇ.
بۇ قوش ھالەتتىكى لايىھە std :: shared_mutex نى غەملەك ، سەپلىمە تىزىملىتىشى ۋە ئوقۇلغان ھەر قانداق سانلىق مەلۇمات قۇرۇلمىسى قاتارلىق ئەھۋاللارغا تەبىئىي ماسلاشتۇرىدۇ.
باھا بىلەن ھەقىقىي كودتا std :: shared_mutex نى قانداق ئىشلىتىسىز؟
std :: shared_mutex نى ئىشلىتىدىغان كودتىكى باھا ئالاھىدە قىممەتلىك ، چۈنكى ماسلىشىش لوگىكىسى ھەققىدە پىكىر يۈرگۈزۈش تەس. ياخشى ئورۇنلاشتۇرۇلغان باھالار نېمە ئۈچۈن مەلۇم بىر قۇلۇپ تىپىنىڭ تاللانغانلىقىنى ئايدىڭلاشتۇرىدۇ ، بۇ كەلگۈسىدىكى قوغدىغۇچىلارنىڭ ئېھتىياتسىزلىقتىن سانلىق مەلۇمات مۇسابىقىسىنى تونۇش خەۋپىنى زور دەرىجىدە تۆۋەنلىتىدۇ. بۇ تىپىك ئەندىزە:
# ئۆز ئىچىگە ئالغان
# ئۆز ئىچىگە ئالغان
#incring
class ConfigRegistry {
mutable std :: shared_mutex mtx_; // تۆۋەندىكى خەرىتىنى قوغدايدۇ
std :: unordered_map data_;
public:
// ئوقۇش يولىنى ئوقۇش: بىر نەچچە تېما بىرلا ۋاقىتتا تېلېفون قىلىشى مۇمكىن
std :: string get (const std :: string & key) const {
std :: shared_lock lock (mtx_); // ھەمبەھىر قۇلۇپ - بىرلا ۋاقىتتا ئوقۇش ئۈچۈن بىخەتەر
auto it = data_.find (key);
ئۇنى قايتۇرۇڭ! = data_.end ()? it-> second: "";
}
// يېزىش يولى: مەخسۇس زىيارەت قىلىش تەلەپ قىلىنىدۇ
void set (const std :: string & key, const std :: string & val) {
std :: unique_lock lock (mtx_); // مەخسۇس قۇلۇپ - بارلىق ئوقۇرمەنلەرنى توسىدۇ
data_ [key] = val;
}
};
باھالارنىڭ كودنى نېمە ئىش قىلىدىغانلىقىنى قايتا-قايتا بايان قىلماستىن ، بەلكى ھەر بىر قۇلۇپ تاللاشنىڭ مۇددىئاسىنى قانداق چۈشەندۈرگەنلىكىگە دىققەت قىلىڭ. بۇ ئالتۇن ئۆلچەم: باھا نېمە em> ئەمەس ، نېمە ئۈچۈن em> دەپ جاۋاب بېرىشى كېرەك. ئۈنسىز ھالەتتىكى ئۆزگىرىشچان ئاچقۇچلۇق سۆز get () نى const دەپ جاكارلاشقا يول قويىدۇ ، ئۇ يەنىلا قۇلۇپلىيالايدۇ ، بۇ ئورتاق ۋە ئۆزگىچە ئەندىزە.
ئاچقۇچلۇق چۈشەنچە: ھەمىشە RAII قۇلۇپ ئورالمىسى (
std :: shared_lock،std :: unique_lock) نىstd :: shared_mutexبىلەن ئىشلىتىڭ - ھەرگىزقۇلۇپ ()ۋەقۇلۇپ ئېچىش ()نى قولدا ئىشلەتمەڭ. مۇستەسنا ئەھۋال ئاستىدا قولدا قۇلۇپلاش ۋاقىت چەكلىمىسى ۋە ئېنىقلانمىغان ھەرىكەتكە كاپالەتلىك قىلىدىغان يول.💡 DID YOU KNOW?
Mewayz replaces 8+ business tools in one platform
CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.
Start Free →
std :: shared_mutex بىلەن ئىشلىگەندە كۆپ ئۇچرايدىغان توسالغۇلار قايسىلار؟
ئېنىق باھا ۋە ياخشى نىيەت بولغان تەقدىردىمۇ ، يەنە بىر كۆپ ئۇچرايدىغان خاتالىق خاتا دانچىلارنى قوغداش. پروگراممېرلار بەزىدە بەك كەڭ قۇلۇپلىنىپ ، ئوقۇرمەن-يازغۇچى ئەندىزىسىنىڭ مەقسىتىنى مەغلۇب قىلىدۇ ياكى بەك تار قىلىپ ، ئايرىم-ئايرىم ئىككى خىل قۇلۇپ سېتىۋېلىش ئوتتۇرىسىدا ئۆزگىرىشچان دەخلى-تەرۇزغا ئۇچرايدۇ. ئۆزگەرگۈچى مىقدار قۇلۇپلانغاندىن باشقا ، ئۆزگەرمەس قوغدىلىدىغان em> تەسۋىرلەنگەن باھا گۇرۇپپىلارنىڭ كودنى تەكشۈرۈش جەريانىدا توغرىلىق ھەققىدە پىكىر يۈرگۈزۈشىگە ياردەم بېرىدۇ. ئىقتىدار سىزنى ھەيران قالدۇرىدۇ. نۇرغۇن يازغۇچىلار بىلەن بولغان تالاش-تارتىش سىستېمىلىرىدا ، C ++ 14 قۇلۇپسىز تاللاش ئۈچۈن ، ھەئە ، بولىدۇ. ئەگەر يېڭى ئورتاق قۇلۇپ ئاچقۇچىلار توختىماي يېتىپ كەلسە ، مەخسۇس قۇلۇپ تەلەپ قىلغۇچى مۇددەتسىز ساقلىشى مۇمكىن - كلاسسىك يازغۇچى ئاچارچىلىق em> مەسىلىسى. C ++ ئۆلچىمى كونكرېت ئادىللىق سىياسىتىنى بەلگىلىمەيدۇ ، شۇڭا ھەرىكەت يولغا قويۇشقا باغلىق. ئەمەلىيەتتە ، كۆپىنچە ئۆلچەملىك كۈتۈپخانىلارنى يولغا قويۇش ئۆچرەتتە تۇرغاندىن كېيىن ساقلىنىۋاتقان مەخسۇس قۇلۇپنى ئالدىنقى ئورۇنغا قويىدۇ ، ئەمما ئاچارچىلىق ئىشلەپچىقىرىشقا كۆڭۈل بۆلىدىغان بولسا ، بۇنى مەخسۇس قورال ساندۇقىڭىز ۋە سۇپىڭىز ئۈچۈن تەكشۈرۈپ بېقىشىڭىز كېرەك. ھېچ بولمىغاندا ، ئاۋازنىڭ باياناتىغا باھا بېرىپ ، ئۇنىڭ قانداق سانلىق مەلۇماتنى قوغدايدىغانلىقى ۋە ئۆزگەرمەسلىكىنى تەسۋىرلەڭ. ھەر بىر قۇلۇپ بېكەتتە ، ئورتاق بەھرىلىنىش بىلەن مەخسۇس زىيارەتنىڭ نېمە ئۈچۈن تاللانغانلىقى چۈشەندۈرۈلگەن قىسقىچە باھا كود تەكشۈرگۈچىلەر ۋە كەلگۈسىدىكى قوغدىغۇچىلار ئۈچۈن مۇھىم قىممەت قوشىدۇ. ماس كېلىدىغان كەمتۈكلەر كۆپەيتىش ۋە ئوڭشاش ئەڭ قىيىنلارنىڭ بىرى ، شۇڭا ئېنىق ، ئېنىق باھاغا سېلىنغان مەبلەغ كۆپ قېتىم پايدا بېرىدۇ. مۇرەككەپ سىستېمىلارنى باشقۇرۇش - مەيلى بىرلا ۋاقىتتا C ++ كودى ياكى پۈتكۈل سودا مەشغۇلاتى بولسۇن - توغرا قورال ۋە ئېنىق قۇرۇلمىنى تەلەپ قىلىدۇ. Mewayz بولسا 207 مودۇللۇق سودا OS بولۇپ ، 138،000 دىن ئارتۇق ئابونت ئىشەنچلىك ، بازارشۇناسلىق ، CRM ، ئېلېكترونلۇق سودا ، ئانالىز ۋە باشقالارغا ئوخشاش ئېنىقلىقنى ئېلىپ كېلىدۇ ، ھەممىسى بىر سۇپادا ھەر ئايدا ئاران 19 دوللار. ئۈزۈلۈپ قالغان ئون نەچچە قورالنى باغلاشنى توختىتىڭ ھەمدە ياخشى لايىھەلەنگەن يۇمشاق دېتالنىڭ ئىنچىكەلىكى بىلەن سودىڭىزنى باشلاڭ. بۈگۈن Mewayz نى app.mewayz.com دىن سىناپ بېقىڭ ھەمدە بىرلىككە كەلگەن سىستېمىنىڭ گۇرۇپپىڭىزنىڭ خىزمەت ئۇسۇلىنى قانداق ئۆزگەرتىدىغانلىقىنى كۆرۈڭ. std :: shared_mutex نىڭ تەجرىبىلىك ئاچقۇچىلارنى بېسىپ چۈشىدىغان ئىنچىكە قىلتاقلىرى بار. ئەڭ خەتەرلىك بولغىنى قۇلۇپنى يېڭىلاش strong>: ئورتاق قۇلۇپنى ئالدى بىلەن قويۇپ بەرمەي مەخسۇس قۇلۇپقا يېڭىلاشنىڭ ھېچقانداق ئۇسۇلى يوق. قويۇپ بەرمەيلا قىلىشقا ئۇرۇنۇش شۇ ھامان قاتمال ھالەتنى كەلتۈرۈپ چىقىرىدۇ ، چۈنكى بۇ تېما ئورتاق قۇلۇپنى ساقلاۋاتقاندا ئورتاق قۇلۇپنى ساقلايدۇ ، ھەر قانداق ئورتاق قۇلۇپ مەۋجۇت بولسىلا ، ئۇ ساقلىغان قۇلۇپنى ئۆز ئىچىگە ئالىدۇ.
std :: shared_mutex قوشۇمچە ھېسابات دەپتىرى سەۋەبىدىن ، ئاددىي std :: mutex دىن ناچارراق بولۇشى مۇمكىن. ئوقۇرمەن-يازغۇچىنىڭ قۇلۇپىنى ساپ غەلىبە دەپ پەرەز قىلىشتىن بۇرۇن ھەمىشە ئارخىپ تۇرۇڭ. P>
std :: shared_mutex std :: mutex ۋە باشقا تاللاشلار بىلەن قانداق سېلىشتۇرما؟
std :: mutex تېخىمۇ ئاددىي ، تالاش-تارتىش تۆۋەن بولغاندا ئېرىشىش تېخىمۇ تېز ، ئوقۇش ۋە يازغاندا ئاساسەن ئوخشاش چاستوتا يۈز بەرگەندە مۇۋاپىق. std :: shared_mutex ئوقۇغاندا پارقىرايدۇ ، يازغاندا كۆرۈنەرلىك سان كۆپ بولىدۇ - 10: 1 ياكى ئۇنىڭدىن يۇقىرى نىسبەت ئالماشتۇرۇشنى ئويلىشىشتىن بۇرۇن مۇۋاپىق قائىدە. std :: shared_timed_mutex نى تونۇشتۇردى ، بۇ try_lock_shared_for () < C ++ 17 نىڭ std :: shared_mutex ئورۇقلىتىشنىڭ ۋاقىت جەدۋىلىنى تاشلايدۇ. ئەگەر ئورتاق بەھرىلىنىدىغان يولدا ۋاقىت قۇلۇپلاشقا ئېھتىياجلىق بولسىڭىز ، std :: shared_timed_mutex يەنىلا مەۋجۇت بولۇپ ، ھەر ئىككى تۈرى تولۇق ئۆلچەملىك. std :: ئاتوم ئېھتىياتچان ئىچكى ساقلىغۇچ بىلەن بىرلەشتۈرۈلگەندە بەزىدە ئاۋازسىز ھالەتنى پۈتۈنلەي ئاددىي بايراق ياكى ھېسابلىغۇچقا ئالماشتۇرالايدۇ ، ئەمما مۇرەككەپ سانلىق مەلۇمات قۇرۇلمىسى ئۈچۈن ، std :: shared_mutex ئۆلچەملىك كۈتۈپخانىدا ئەڭ كۆپ ئوقۇشقا بولىدىغان ۋە ساقلىغىلى بولىدىغان ھەل قىلىش چارىسى بولۇپ قالىدۇ. دائىم سورايدىغان سوئاللار h2>
std :: shared_mutex ئاچلىقنى كەلتۈرۈپ چىقارامدۇ؟
std :: shared_mutex نى std :: condition_variable بىلەن ئىشلىتىشكە بىخەتەرمۇ؟
std :: condition_variable std :: unique_lock نى تەلەپ قىلىدۇ ، شۇڭا ئۇ std :: shared_mutex بىلەن بىۋاسىتە ماسلاشمايدۇ. ئەگەر ئورتاق ئاۋازنى ساقلاش جەريانىدا بىر شەرتنى ساقلاشقا توغرا كەلسە ، std :: condition_variable_any نى ئىشلىتىڭ ، ئۇ ھەر قانداق BasicLockable تىپى بىلەن ئىشلەيدۇ ، مەسىلەن std :: shared_mutex std :: shared_lock . ھەر قېتىم std :: shared_mutex نى ئىشلەتكەندە باھا قوشۇشىم كېرەكمۇ؟
Try Mewayz Free
All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.
Get more articles like this
Weekly business tips and product updates. Free forever.
You're subscribed!
Start managing your business smarter today
Join 30,000+ businesses. Free forever plan · No credit card required.
Ready to put this into practice?
Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.
Start Free Trial →Related articles
Hacker News
ASCII and Unicode quotation marks (2007)
Mar 16, 2026
Hacker News
Federal Right to Privacy Act – Draft legislation
Mar 16, 2026
Hacker News
How I write software with LLMs
Mar 16, 2026
Hacker News
Quillx is an open standard for disclosing AI involvement in software projects
Mar 16, 2026
Hacker News
What is agentic engineering?
Mar 16, 2026
Hacker News
An experiment to use GitHub Actions as a control plane for a PaaS
Mar 16, 2026
Ready to take action?
Start your free Mewayz trial today
All-in-one business platform. No credit card required.
Start Free →14-day free trial · No credit card · Cancel anytime