Std-e düşünmek: C ++ 17-den paýlaşylan_mutex
Teswirler
Mewayz Team
Editorial Team
C ++ 17
-den std :: shared_mutex düşünmek C ++ 17-de hödürlenenstd :: shared_mutex , sinhronizasiýa başlangyjy bolup, ýazuw amallary üçin aýratyn elýeterliligi üpjün etmek bilen bir hatarda köp sapaklaryň umumy (okalýan) gulplary saklamaga mümkinçilik berýär. Häzirki zaman C ++ -da iň köp ýaýran ylalaşyk kynçylyklarynyň birini döredijilere üçünji tarap kitaphanalaryna ýa-da platforma ýörite API-lerine ýetmän okyjy-ýazyjy gulpuny açmagyň arassa, adaty usulyny çözýär.
Std :: paýlaşylan_mutex we näme üçin C ++ 17-de goşuldy?
C ++ 17-den öň, okyjy-ýazyjy semantikasyna mätäç döredijiler, POSIX ulgamlarynda pthread_rwlock_t ýa-da Windows-da SRWLOCK ýaly platforma çözgütlerine bil baglamalydy, ýa-da Boost ýaly üçünji tarap kitaphanalaryny ulanardylar. C ++ 17 standart komiteti bu boşlugy ykrar etdi we gönüden-göni çözmek üçin sözbaşysynda std :: shared_mutex girizdi.
Esasy ideýa gönümel: hakyky dünýä programmalarynyň köpüsinde maglumatlar ýazylanyndan has ýygy okalýar. Adaty std :: mutex ähli girişi seriýalaşdyrýar - okalýar - gereksiz päsgelçilikleri döredýär. std :: shared_mutex iki gulplama re betweenimini tapawutlandyrmak arkaly bu çäklendirmäni aýyrýar:
- Paýlaşylan (oka) gulp -
lock_shared ()arkaly gazanylýar; köp sapak bir wagtyň özünde saklap biler, şol bir wagtyň özünde okamak üçin ideal bolar. - Exclusive (ýazmak) gulpy -
lock ()arkaly gazanylýar; bir gezekde diňe bir sapak saklap biler we tutulanda umumy gulplara rugsat berilmeýär. - std :: shared_lock - gurluşykda
lock_shared ()we weýrançylykdaunlock_shared ()çagyrýan RAII örtük. - std :: unique_lock / std :: lock_guard - ýazuw amallarynyň doly goralýandygyny we kadadan çykma üpjün edilmegini üpjün edýän aýratyn re modeim bilen ulanylýar.
Bu goşa re modeimli dizaýn, std :: shared_mutex keşler, konfigurasiýa registrleri we okalýan islendik maglumat gurluşy ýaly iş ssenariýalaryna tebigy laýyk gelýär.
Teswirler bilen hakyky kodda std :: shared_mutex nädip ulanýarsyňyz?
std :: shared_mutex ulanýan koddaky düşündirişler aýratyn gymmatly, sebäbi ylalaşyk logikasy barada pikir etmek gaty kyn. Gowy ýerleşdirilen teswirler näme üçin belli bir gulp görnüşiniň saýlanandygyny aýdyňlaşdyrýar, bu geljekki hyzmatçylaryň tötänleýin maglumat ýaryşlaryny girizmek howpuny ep-esli azaldar. Ine adaty bir nagyş:
# goşuň
# goşuň
# goşuň
“ConfigRegistry” synpy
üýtgäp bilýän std :: shared_mutex mtx_; // aşakdaky kartany goraýar
std :: tertipsiz_map data_;
köpçülik:
// Pathol oka: birnäçe sapak bir wagtda jaň edip biler
std :: string get (const std :: string & key) const {
std :: shared_lock gulp (mtx_); // umumy gulp - şol bir wagtyň özünde okamak üçin howpsuz
awtomatik = data_.find (açar);
yzyna gaýtaryň! = data_.end ()? it-> ikinji: "";
}
// pathol ýazyň: aýratyn giriş zerur
boşluk toplumy (const std :: string & key, const std :: string & val) {
std :: unique_lock gulpy (mtx_); // aýratyn gulp - ähli okyjylary bloklaýar
data_ [açar] = val;
}
};
Teswirleriň diňe koduň näme edýändigini gaýtalamazdan, her gulp saýlamasynyň niýetini nädip düşündirýändigine üns beriň. Bu altyn standart: teswirler näme däl-de, näme üçin jogap bermelidir. Muteeksdäki üýtgedilip bilinýän açar söz, umumy we manysyz nagyş, henizem gulplap bilýän wagtyňyzda get () const yglan edilmegine mümkinçilik berýär.
Esasy düşünje: Elmydama RAII gulp örtüklerini (
std :: shared_lock,std :: unique_lock)std :: shared_mutexbilen ulanyň - hiç haçanlock ()wegulpy ()el bilen ulanmaň. Kadadan çykmalar bar bolsa el bilen gulplamak, möhletlere we kesgitlenmedik hereketlere kepillendirilen ýol.
std :: shared_mutex bilen işleýän wagtyňyz umumy ýalňyşlyklar näme?
Düşündirişler we gowy niýetler bilen hem std :: shared_mutex tejribeli işläp düzüjileri gyzyklandyrýan inçe duzaklar bar. Iň howplysy, gulpy täzelemek : umumy gulpy ilki goýbermezden aýratyn gulp bilen täzelemegiň içerki usuly ýok. Goýbermezden muny etmäge synanyşmak, birbada gulp saklaýar, sebäbi umumy gulp bar bolsa, şol bir wagtyň özünde saklap bolýan gulpy saklap bolýança hiç wagt berilmeýän aýratyn gulp garaşýarka, umumy gulp saklanýar.
💡 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 →Anotherene bir umumy ýalňyşlyk, nädogry granulirligi goramakdyr. Döredijiler käwagt gaty giň gulplap, okyjy-ýazyjy nagşynyň maksadyny ýeňip geçýärler ýa-da iki sany aýratyn gulplama arasynda üýtgemeýänleriň penjirelerini goýýarlar. üýtgeýjiniň goralýandygyny düşündirýän teswirler, diňe üýtgeýjiniň gulplanmagy däl-de, toparlara kod gözden geçirilende dogrylygy barada pikirlenmäge kömek edýär.
Çykyş hem sizi geň galdyryp biler. Köp ýazyjylar bilen gaty jedelli ulgamlarda, std :: shared_mutex goşmaça buhgalter hasabynyň kömegi bilen adaty std :: mutex -dan has erbet ýerine ýetirip biler. Okyjy-ýazyjynyň gulpuny açmazdan ozal elmydama profil arassa ýeňişdir.
std :: shared_mutex std :: mutex we beýleki alternatiwalar bilen nädip deňeşdirilýär?
std :: mutex has ýönekeý, gapma-garşylyk pes bolanda has çalt we okamak we ýazmak takmynan deň ýygylykda ýüze çykýar. std :: shared_mutex ep-esli köp ýazylanda okaýar - 10: 1 ýa-da has ýokary gatnaşygy, wyklýuçateli göz öňünde tutmazdan ozal dogry düzgün.
C ++ 14 wagtlaýyn synanyşyklar üçin try_lock_shared_for () we try_lock_shared_until () goşýan std :: shared_timed_mutex hödürledi. C ++ 17-iň std :: shared_mutex has ýönekeý durmuşa geçirmek üçin bellenen wariantlary taşlaýar. Umumy ýolda wagtlaýyn gulplamak zerur bolsa, std :: shared_timed_mutex elýeterli bolup, iki görnüşi hem doly standart.
Gulpsyz alternatiwalar üçin, std :: atom seresaply ýat sargytlary bilen utgaşyp, käwagt ýönekeý baýdaklar ýa-da hasaplaýjylar üçin muteeksiň ornuny tutup biler, ýöne çylşyrymly maglumat gurluşlary üçin std :: shared_mutex adaty kitaphanada iň okalýan we dowam edip boljak çözgüt bolup galýar.
Freygy-ýygydan soralýan soraglar
std :: shared_mutex açlyga sebäp bolup bilermi?
Hawa, edip biler. Täze paýlaşylan gulp eýeleri yzygiderli gelmegini dowam etdirseler, aýratyn gulp talap ediji belli bir wagtlap garaşyp biler - nusgawy ýazyjynyň açlygy meselesi. C ++ standarty belli bir adalatlylyk syýasatyny talap etmeýär, şonuň üçin özüni alyp barşyň durmuşa geçirilmegine baglydyr. Iş ýüzünde, adaty kitaphanalaryň köpüsi nobata durandan soň garaşylýan aýratyn gulplary ileri tutýarlar, ýöne açlyk önümçilikde alada döredýän bolsa, muny ýörite gurallar zynjyry we platforma üçin barlamaly.
std :: shared_mutex std :: condition_variable bilen ulanmak ygtybarlymy?
std :: condition_variable std :: unique_lock talap edýär, şonuň üçin std :: shared_mutex bilen gönüden-göni gabat gelmeýär. Paýlaşylan muteeks saklaýan wagtyňyzda bir şerte garaşmaly bolsaňyz, std :: shared_mutex ýaly std :: shared_lock
std :: condition_variable_any ulanyň.
Her gezek std :: shared_mutex ulananymda teswir goşmalymy?
Iň bolmanda, haýsy maglumatlary goraýandygyny we saklaýan üýtgewsizlerini düşündirmek üçin muteeksiň beýanyna düşündiriş beriň. Her gulp sahypasynda, eksklýuziw elýeterliligiň garşysyna näme üçin saýlanandygyny düşündirýän gysga teswir, kod synçylary we geljekki hyzmatçylary üçin möhüm ähmiýete eýe bolýar. Gabat gelmeýän näsazlyklar köpeltmek we düzetmek iň kyn zat, şonuň üçin anyk, takyk düşündirişlere goýlan maýa goýumlary birnäçe gezek dividend töleýär.
Çylşyrymly ulgamlary dolandyrmak - bir wagtyň özünde C ++ kody ýa-da tutuş bir iş amaly - dogry gurallary we anyk gurluşy talap edýär. Mewayz , 138,000-den gowrak ulanyjynyň marketing, CRM, elektron söwda, analitika we başga-da birmeňzeş aç-açanlygy üpjün etmek üçin 207 modully iş ulgamy, aýda bary-ýogy 19 dollardan başlaýar. Öçürilen onlarça gural bilen gürleşmegi bes ediň we oňat dizaýn edilen programma üpjünçiliginiň takyklygy bilen işiňizi dolandyryp başlaň. Şu gün app.mewayz.com -da Mewayz synap görüň we bitewi ulgamyň toparyňyzyň işleýşini üýtgedýändigini gö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
GoGoGrandparent (YC S16) is hiring Back end Engineers
Mar 23, 2026
Hacker News
"Collaboration" Is Bullshit
Mar 23, 2026
Hacker News
Intuitions for Tranformer Circuits
Mar 23, 2026
Hacker News
Department of State advises Americans worldwide to exercise increased caution
Mar 23, 2026
Hacker News
Migrating the American Express Payment Network, Twice
Mar 23, 2026
Hacker News
Why I Vibe in Go, Not Rust or Python
Mar 22, 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