Ukuqonda Std:Shared_mutex ukusuka ku-C++17
Amagqabantshintshi
Mewayz Team
Editorial Team
Ukuqonda std::shared_mutex ukusuka ku-C++17
std::shared_mutex, yaziswa kwi-C++17, i-synchronization primitive evumela imisonto emininzi ukuba ngaxeshanye ibambe izitshixo ekwabelwana ngazo (funda) ngelixa iqinisekisa ukufikelela okukhethekileyo kwimisebenzi yokubhala. Isombulula omnye weyona mingeni ixhaphakileyo yeconcurrence kwi-C++ yale mihla ngokunika abaphuhlisi indlela ecocekileyo, esemgangathweni yokuphumeza ukutshixa komfundi-mbhali ngaphandle kokufikelela kumathala eencwadi angaphandle okanye i-APIs yeqonga elithile.
Yintoni Kanye Kanye std::shared_mutex kwaye Kwakutheni Ukuze Yongezwe kwi-C++17?
Phambi kwe-C++17, abaphuhlisi ababedinga i-semantics yomfundi-umbhali kwakufuneka baxhomekeke kwizisombululo zeqonga elithile ezifana pthread_rwlock_t kwiinkqubo zePOSIX okanye SRWLOCK kwi-Windows, okanye baya kusebenzisa amathala eencwadi angaphandle afana ne-Boost. Ikomiti esemgangathweni ye-C++17 iye yaqaphela esi sikhewu yaza yazisa std::shared_mutex kumbhalo othi ukuze ilungise ngqo.
Ingcinga engundoqo iqondile: kwiinkqubo ezininzi zehlabathi lokwenene, idatha ifundwa ngokuphindaphindiweyo kunokuba ibhaliwe. Umgangatho std::mutex ulandelelanisa konke ukufikelela - ukufunda kuqukiwe - nto leyo edala imiqobo engeyomfuneko. std::shared_mutex iphakamisa eso sithintelo ngokwahlula phakathi kweendlela ezimbini zokutshixa:
- Isitshixo ekwabelwana ngaso (funda) — sifunyenwe nge-
lock_shared (); Imisonto emininzi inokubamba oku ngaxeshanye, iyenze ilungele ufundo oluhambelanayo. - Okukhethekile (bhala) ukutshixa — efunyenwe nge
tshixa (); mnye kuphela umsonto onokuthi ubambe oku ngexesha, kwaye akukho zitshixo ekwabelwana ngazo zivumelekileyo ngelixa ibanjwa. - std::shared_lock — i-RAII wrapper ebiza
lock_shared ()kulwakhiwo kunyeunlock_shared ()ekutshabalaliseni, ukuthintela ukuvuza kwezixhobo. - std::unique_lock / std::lock_guard — isetyenziswa ngendlela ekhethekileyo, ukuqinisekisa ukuba imisebenzi yokubhala ikhuselwe ngokupheleleyo kwaye ngaphandle-ikhuselekile.
Olu luyilo lwemowudi-mbini lwenza std::shared_mutex ilingane ngokwendalo yeemeko ezifana neecache, iirejistri zoqwalaselo, kunye nasiphi na isakhiwo sedatha apho ufundo lulawula umsebenzi.
Uyisebenzisa njani std::shared_mutex kwiKhowudi yokwenyani enamagqabantshintshi?
Amagqabantshintshi kwikhowudi esebenzisa std::shared_mutex axabiseke kakhulu kuba i-concurrency logic idume ngokunzima ukuqiqa ngayo. Amazwana abekwe kakuhle acacisa kutheniuhlobo oluthile lokutshixa lukhethiwe, olunciphisa kakhulu umngcipheko wabagcini bexesha elizayo ngengozi ukwazisa iintlanga zedatha. Nantsi ipateni eqhelekileyo:
#zibandakanya
#bandakanya
#quka
iklasi ConfigRegistry {
std ::kwabelwana_ mutex mtx_; // ikhusela imephu engezantsi
std::unordered_map data_;
uluntu:
// Funda indlela: imisonto emininzi inokubiza oku ngaxeshanye
std :: umtya fumana (const std:: umtya& isitshixo) const {
std::isitshixo_ekwabelwana ngaso(mtx_); // isitshixo ekwabelwana ngaso — ikhuselekile ukuze ifundwe ngaxeshanye
auto it = data_.find(isitshixo);
yibuyisele != data_.end() ? yona->yesibini : "";
}
// Bhala indlela: ufikelelo olulodwa olufunekayo
isethi engenanto (const std:: umtya& isitshixo, const std:: umtya& val) {
std ::isitshixo_esisodwa(mtx_); // isitshixo esikhethekileyo - sivala bonke abafundi
idatha_[isitshixo] = ival;
}
};
Qaphela indlela amagqabantshintshi achaza ngayo injongo esemva kokhetho ngalunye lokutshixa kunokuba uphinde uphinde wenze into eyenziwa yikhowudi. Lo ngumgangatho wegolide: amagqabantshintshi afanele aphendule kutheni, hayiyintoni. Igama elingundoqo const ngelixa ukwazi ukutshixa, ipateni eqhelekileyo kunye nentetho.
Ulwazi Olungundoqo: Soloko usebenzisa izisongelo zokutshixa ze-RAII (
std::shared_lock,std::unique_lock) ngestd::shared_mutex— ungaze ufowuneletshixa()kunyevula()ngesandla. Ukutshixa ngesandla phambi kwezinto ezikhethekileyo yindlela eqinisekisiweyo eya kwideadlock kunye nokuziphatha okungachazwanga.
Yeyiphi imigibe eqhelekileyo xa usebenza ne-std::shared_mutex?
Nangezimvo ezicacileyo kunye neenjongo ezilungileyo, std::shared_mutex inemigibe echuliweyo ekhwelisa abaphuhlisi abanamava. Eyona nto iyingozi kakhuluuphuculo lokutshixa: akukho ndlela eyakhelweyo yokuphucula i-lock ekwabelwana ngayo kwisitshixo esikhethekileyo ngaphandle kokuyikhulula kuqala. Ukuzama ukwenza oko ngaphandle kokukhulula kudala ukuvalwa ngoko nangoko kuba umsonto ubambe iqhaga ekwabelwana ngalo ngelixa ulindele iqhaga elikhethekileyo elingasoze linikezelwe ukuba kukho nasiphi na isitshixo ekwabelwana ngaso - kuquka nesi sibambeleyo.
💡 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 →Enye impazamo eqhelekileyo kukukhusela imbudumbudu engalunganga. Abaphuhlisi ngamanye amaxesha batshixa ngokubanzi kakhulu, boyisa injongo yepateni yomfundi-umbhali, okanye kumxinwa kakhulu, beshiya iifestile apho ukungaguquguquki kwaphulwayo phakathi kokufunyanwa kweqhaga ezimbini ezahlukeneyo. Amagqabantshintshi achaza okungaguquguqukiyo okukhuselweyo, kunokuba nje ukuguquguquka kutshixiwe, amaqela anceda aqiqe malunga nokuchaneka ngexesha lokuphononongwa kwekhowudi.
Ukusebenza nako kunokukothusa. Kwiinkqubo ezisukunyelwayo kakhulu ezinababhali abaninzi, std::shared_mutex isenokwenza okubi ngakumbi kunethafa std::mutex ngenxa yogcino lwencwadi olongezelelweyo. Ngalo lonke ixesha iprofayile phambi kokucinga ukuba umfundi-umbhali lokutshixa lunetha.
Iyenza njani i-std::shared_mutex xa ithelekiswa ne-std::mutex kunye nezinye iindlela ezizezinye?
std::mutex ilula, ikhawuleza ukuyifumana xa ingxabano iphantsi, kwaye kufanelekile xa kufundwa kwaye kubhalwa kwenzeka ngokulinganayo ngokulinganayo. std::shared_mutex iyakhanya xa ifundwa ngokubalulekileyo inani elibhaliweyo - i-10: 1 okanye umlinganiselo ophezulu ngumgaqo ofanelekileyo wesithupha phambi kokuqwalasela utshintsho.
C++14 yazisa std::shared_timed_mutex, eyongeza try_lock_shared_for() kunye try_lock_shared_until() ngemizamo yexesha. I-C++17's std::shared_mutex iwisa ukwahluka kwexesha kuphunyezo oluncinci. Ukuba ufuna ukutshixa ixesha kwindlela ekwabelwana ngayo, std::shared_timed_mutex ihlala ikhona kwaye zombini iindidi zisemgangathweni ngokupheleleyo.
Ukwenzela ezinye iindlela zokutshixa, std::atomic kudityaniswe nomyalelo wenkumbulo ngocoselelo ngamanye amaxesha unokutshintsha i-mutex ngokupheleleyo kwiiflegi ezilula okanye izinto zokubala, kodwa kulwakhiwo lwedatha entsonkothileyo, std::shared_mutex ihlala isesona sisombululo sifundekayo nesinokugcinwa kwilayibrari eqhelekileyo.
Imibuzo Ebuzwa Rhoqo
Ngaba i-std::shared_mutex inokubangela indlala?
Ewe, inako. Ukuba abanini-isitshixo ekwabelwanayo ngaso bahlala befika ngokuqhubekayo, umceli we-lock ekhethekileyo unokulinda ixesha elingenammiselo - ingxaki yeklasi yombhali yindlala. Umgangatho we-C ++ awugunyazisi umgaqo-nkqubo othile wobulungisa, ngoko ukuziphatha kuxhomekeke ekuphunyezweni. Ngokwesiqhelo, uninzi lwemigangatho yophumezo lwethala leencwadi lubeka phambili ngokuphambili amaqhaga alindileyo akhethekileyo xa sele emgceni, kodwa kufuneka uqinisekise oku kwikhonkco lakho lezixhobo kunye neqonga ukuba indlala iyinkxalabo kwimveliso.
Ingaba std::shared_mutex ikhuselekile ukusebenzisa ne std::condition_variable?
std::condition_variable ifuna std::unique_lock, ngoko ke ayihambelani ngqo ne std::shared_mutex. Ukuba ufuna ukulinda kwimeko ngelixa ubambe imutex ekwabelwana ngayo, sebenzisa std::condition_variable_any, esebenza nalo naluphi na uhlobo oluSisiseko oluLockable, kuquka std::shared_mutex idityaniswe ne std::shared_lock.
Ngaba kufuneka ndifake izimvo ngalo lonke ixesha ndisebenzisa std::shared_mutex?
Okuncinci, phawula ngesibhengezo se-mutex ukuchaza ukuba yeyiphi idatha eyikhuselayo kunye neziguquko eziyigcinayo. Kwindawo nganye yokutshixa, uluvo olufutshane oluchaza ukuba kutheni kwabelwana ngokuthelekiswa nokufikelela okukhethekileyo kukhethwe longeza ixabiso elibalulekileyo kubabuyekezi bekhowudi kunye nabagcini bexesha elizayo. Iibugs zeConcurrency ziphakathi kwezona zinzima ukuvelisa kunye nokuzilungisa, ngoko ke utyalo-mali kwiinkcazo ezicacileyo nezichanekileyo zihlawula imbuyekezo amaxesha amaninzi ngaphezulu.
Ukulawula iinkqubo eziyinkimbinkimbi - nokuba ikhowudi yeC ++ efanayo okanye yonke imisebenzi yeshishini - ifuna izixhobo ezifanelekileyo kunye nesakhiwo esicacileyo. Mewayzyi-OS ye-modyuli ye-207 ethembekileyo ngabasebenzisi abangaphezu kwe-138,000 ukuzisa ukucaca okufanayo kwintengiso, i-CRM, i-e-commerce, i-analytics, kunye nokunye, konke kwiqonga elinye eliqala kwi-$ 19 kuphela ngenyanga. Yeka ukujija izixhobo ezininzi eziqhawulwe kwaye uqale ukuqhuba ishishini lakho ngokuchanekileyo kwesoftware eyilwe kakuhle. Zama i-Mewayz namhlanje ku-app.mewayz.com kwaye ubone indlela inkqubo emanyeneyo eyitshintsha ngayo indlela iqela lakho elisebenza ngayo.
We use cookies to improve your experience and analyze site traffic. Cookie Policy