Ịghọta Std:Shared_mutex sitere na C++17
Okwu
Mewayz Team
Editorial Team
Nghọta std ::shared_mutex sitere na C++17
std ::shared_mutex, ewebata na C++17, bụ oge mmekọrịta mmekọrịta nke na-enye ohere ka ọtụtụ eri jide otu mkpọchi (gụọ) n'otu oge ma na-ahụ na ohere pụrụ iche maka ọrụ ide. Ọ na-edozi otu n'ime ihe ịma aka concurrency a na-ahụkarị na C++ ọgbara ọhụrụ site n'inye ndị mmepe ụzọ dị ọcha, ọkọlọtọ iji mejuputa mkpọchi onye na-agụ akwụkwọ na-eruteghị ọba akwụkwọ ndị ọzọ ma ọ bụ API ndị akọwapụtara n'elu ikpo okwu.
Gịnị bụ kpọmkwem std::shared_mutex na gịnị kpatara e ji tinye ya na C++17?
Tupu C++ 17, ndị mmepe chọrọ nyocha nke onye na-agụ akwụkwọ ga-adabere na ngwọta akọwapụtara dị ka pthread_rwlock_t na sistemụ POSIX ma ọ bụ SRWLOCK na Windows, ma ọ bụ na ha ga-eji ọba akwụkwọ ndị ọzọ dị ka Boost. Kọmiti ọkọlọtọ C++17 ghọtara ọdịiche a wee webata std::shared_mutex na nkụnye eji isi mee iji lebara ya anya ozugbo.
Echiche bụ isi kwụ ọtọ: n'ọtụtụ mmemme nke ụwa, a na-agụ data karịa ka edere ya. Ọkọlọtọ std :: mutex na-ahazi ohere niile - gụnyere gụnyere - nke na-emepụta mkpọma na-enweghị isi. std::shared_mutex na-ebuli mmachi ahụ site n'ịmata ọdịiche dị n'etiti ụdị mkpọchi abụọ:
- Mkpọchi nkekọrịtara (gụọ) — enwetara site na
lock_shared(); ọtụtụ eri nwere ike ijide nke a n'otu oge, na-eme ka ọ dị mma maka ịgụ ihe n'otu oge. - Mkpọchi pụrụiche (dee) - enwetara site na
mkpọchi (); naanị otu eri nwere ike ijide nke a n'otu oge, ọ nweghịkwa mkpọchi a na-anabata mgbe ejiri ya. - std::shared_lock — ihe mkpuchi RAII nke na-akpọ
lock_shared()na nrụpụta yanaunlock_shared()na mbibi, na-egbochi mpụta akụrụngwa. - std :: akpankpọ_lock / std :: lock_guard - eji ya na ọnọdụ pụrụiche, na-ahụ na arụrụ ọrụ ide bụ echekwabara nke ọma yana enweghị nchekwa.
Mwepụta nke abụọ a na-eme ka std::shared_mutex bụrụ ihe dabara adaba maka ọnọdụ dị ka cache, ndebanye aha nhazi, na nhazi data ọ bụla ebe agụ na-achịkwa ibu ọrụ.
Olee otu I si eji std ::shared_mutex na ezigbo koodu na nkọwa?
Okwu ndị dị na koodu na-eji std::shared_mutex bara uru karịsịa n'ihi na mgbagha mgbagha bụ ihe siri ike nghọta. Okwu ndị e debere nke ọma na-akọwapụta ihe kpatara otu ụdị mkpọchi ahọpụtara, nke na-ebelata nke ukwuu ihe ize ndụ nke ndị na-echekwa ọdịnihu na-ewebata agbụrụ data na mberede. Nke a bụ ụkpụrụ a na-ahụkarị:
#gụnye
#gụnye
#gụnye
klaasị ConfigRegistry {
mutable std ::shared_mutex mtx_; // na-echebe maapụ dị n'okpuru
std :: unordered_map data_;
ọha:
// Gụọ ụzọ: ọtụtụ eri nwere ike ịkpọ nke a n'otu oge
std :: eriri nweta (const std :: eriri & igodo) const {
std :: mkpọchi mkpọchi shareed (mtx_); // mkpọchi nkekọrịta - nchekwa maka ịgụ ihe n'otu oge
akpaaka ya = data_. chọta (igodo);
weghachi ya!= data_.end()? it->nke abụọ :"";
}
// Dee ụzọ: ohere pụrụ iche achọrọ
ihe efu set (const std :: eriri & igodo, const std :: eriri & val) {
std :: mkpọchi_pụrụiche (mtx_); // Mkpọchi pụrụ iche - na-egbochi ndị na-agụ akwụkwọ niile
data_[igodo] = val;
}
};
Rịba ama ka nkọwa ndị a si akọwa ebumnuche dị n'azụ nhọrọ mkpọchi ọ bụla kama ikwughachi naanị ihe koodu ahụ na-eme. Nke a bụ ọkọlọtọ ọla edo: nkọwa kwesịrị ịzaihe kpatara, ọ bụghị ihe. Okwu mutable dị na mutex na-enye ohere ka ịkpọpụta nweta() const ka ọ ka na-enwe ike igbachi, ụkpụrụ nkịtị na nke akpaala.
Key Insight: Jiri RAII mkpọchi wrappers mgbe niile (
std :: share_lock,std :: akpankpọ_mkpọchi) nastd ::shared_mutex— ejila aka kpọọkpọchie ()nakpọghee()aka. Mkpọchi akwụkwọ ntuziaka n'ihu ndị ewepu bụ ụzọ ekwere n'aka maka mkpọchi anwụ na omume enweghị nkọwa.
Gịnị bụ ọnyà na-adịkarị mgbe ị na-arụ ọrụ na std ::shared_mutex?
N'ọbụlagodi na nkọwa doro anya na ezi ebumnuche, std::shared_mutex nwere ọnyà aghụghọ na-emebi ndị mmepe nwere ahụmahụ. Nke kachasị dị ize ndụ bụmkpọchi nkwalite: ọ dịghị ụzọ arụnyere n'ime kwalite a na-ekekọrịta mkpọchi na nanị mkpọchi na-ebughị ụzọ ahapụ ya. Ịgbalị ime ya na-ahapụghị ya na-emepụta mkpọchi ngwa ngwa n'ihi na eriri ahụ na-ejide mkpọchi nkekọrịta mgbe ọ na-eche mkpọchi pụrụ iche nke a na-apụghị inye ma ọ bụrụhaala na mkpọchi ọ bụla dị - gụnyere nke ọ na-ejide.
💡 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 →Mmehie ọzọ a na-ahụkarị bụ ichekwa granularity na-ezighi ezi. Ndị nrụpụta mgbe ụfọdụ na-agbachi nke ukwuu, na-emeri ebumnuche nke ụkpụrụ onye na-agụ akwụkwọ, ma ọ bụ nke dị warara, na-ahapụ windo ebe emebighị ihe dị iche n'etiti nnweta mkpọchi abụọ dị iche iche. Okwu ndị na-akọwa a na-echekwa ihe na-adịghị agbanwe agbanwe, kama naanị mgbanwe a na-akpọchi, na-enyere ndị otu aka iche echiche maka izi ezi n'oge nyocha koodu.
Arụmọrụ nwekwara ike iju gị anya. Na sistemu na-agbarịta ụka nke ukwuu yana ọtụtụ ndị ode akwụkwọ, std::shared_mutex nwere ike na-arụ ọrụ dị njọ karịa nke std:: mutex dị larịị n'ihi nkwunye ntinye akwụkwọ. Profaịlụ mgbe niile tupu ị were na mkpọchi onye na-agụ akwụkwọ bụ mmeri net.
Kedu ka std ::shared_mutex si atụnyere std ::mutex na Nhọrọ ndị ọzọ?
std::mutex dị mfe, na-enweta ngwa ngwa mgbe esemokwu dị ala, na dabara adaba mgbe a na-agụ na ide ihe na-eme n'otu oge nha anya. std::shared_mutex na-enwu mgbe a na-agụ ya nke ukwuu karịa ka ọnụ ọgụgụ na-ede - nha 10:1 ma ọ bụ karịa bụ usoro isi mkpịsị aka ezi uche dị na ya tupu ịtụle mgbanwe mgbanwe.
C++14 ewebatara std::shared_timed_mutex, nke na-agbakwunye try_lock_shared_for() na try_lock_shared_ruo () maka mbọ oge. C++17's std::shared_mutex na-atụba ụdị dị iche iche nke oge maka mmejuputa dị nro. Ọ bụrụ na ịchọrọ mkpọchi oge n'ụzọ a na-ekekọrịta, std::shared_timed_mutex ka dị na ụdị abụọ a bụ ọkọlọtọ zuru oke.
Maka usoro ndị ọzọ na-enweghị mkpọchi, std :: atomic jikọtara ya na iji nlezianya na-ahazi ebe nchekwa nwere ike dochie mutex kpamkpam maka ọkọlọtọ ma ọ bụ counters dị mfe, mana maka usoro data dị mgbagwoju anya, std::shared_mutex na-anọgide na-abụ ihe ngwọta kachasị agụ na nke a na-echekwa na ọba akwụkwọ ọkọlọtọ.
Ajụjụ a na-ajụkarị
nwere ike std::shared_mutex butere agụụ?
Ee, ọ nwere ike. Ọ bụrụ na ndị njide mkpọchi ọhụrụ na-aga n'ihu na-abịarute mgbe niile, onye na-arịọ mkpọchi pụrụ iche ruo mgbe ebighị ebi - nsogbu onye ode akwụkwọ kpochapụrụ. Ọkọlọtọ C++ enyeghị iwu maka izi ezi, yabụ omume dabere na mmejuputa ya. Na omume, ọtụtụ mmemme n'ọbá akwụkwọ na-ebute ụzọ na-echere mkpọchi pụrụ iche ozugbo etinyere ha n'ahịrị, mana ị ga-enyocha nke a maka ngwa ngwa na ikpo okwu gị akọwapụtara ma ọ bụrụ na agụụ bụ nchegbu na mmepụta.
Std ::shared_mutex ọ dị mma iji std ::condition_variable?
std ::condition_variable chọrọ std :: akpankpọ_lock, yabụ na ọ dakọghị ozugbo na std::shared_mutex. Ọ bụrụ na ịchọrọ ichere n'ọnọdụ mgbe ị na-ejide mutex nkekọrịta, jiri std::condition_variable_any, nke na-arụ ọrụ na ụdị BasicLockable ọ bụla, gụnyere std::shared_mutex jikọtara ya na std::shared_lock.
Ekwesịrị m itinye nkọwa oge ọ bụla m na-eji std::shared_mutex?
Opekempe, kwuo nkwupụta nke mutex iji kọwaa ihe data ọ na-echebe yana mgbanwe ndị ọ na-edobe. Na saịtị mkpọchi ọ bụla, nkọwa dị nkenke na-akọwa ihe kpatara ahọpụtara ikekọrịta yana ohere pụrụ iche na-agbakwunye uru dị ukwuu maka ndị na-enyocha koodu na ndị na-echekwa n'ọdịnihu. chinchi concurrency so na ndị siri ike ịmụpụta na idozi, yabụ itinye ego na nkọwa doro anya na-akwụ ụgwọ nkesa ọtụtụ ugboro.
Ijikwa usoro mgbagwoju anya - ma koodu C ++ na-arụkọ ọrụ ọnụ ma ọ bụ ọrụ azụmahịa dum - chọrọ ngwaọrụ kwesịrị ekwesị na nhazi doro anya. Mewayzbụ 207-module azụmahịa OS tụkwasịrị obi site n'elu 138,000 ndị ọrụ weta otu doo anya na ahịa, CRM, e-commerce, analytics, na ndị ọzọ, niile na otu ikpo okwu malite na nanị $19 kwa ọnwa. Kwụsị ịgbanye ọtụtụ ngwaọrụ ejikọrọ wee malite ịzụ ahịa gị site na iji sọftụwia emebere nke ọma. Gwaa Mewayz taa na app.mewayz.com wee hụ ka otu usoro ejikọtara ọnụ si agbanwe ka otu gị si arụ ọrụ.
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
Passengers who refuse to use headphones can now be kicked off United flights
Mar 21, 2026
Hacker News
404 Deno CEO not found
Mar 21, 2026
Hacker News
Iran launched unsuccessful attack on UK's Diego Garcia
Mar 21, 2026
Hacker News
Grafeo – A fast, lean, embeddable graph database built in Rust
Mar 21, 2026
Hacker News
Senior European journalist suspended over AI-generated quotes
Mar 21, 2026
Hacker News
Some Things Just Take Time
Mar 21, 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