Oye Std:Shared_mutex lati C++17
Comments
Mewayz Team
Editorial Team
Oye std :: sharing_mutex lati C ++ 17 h1>
std ::shared_mutex, ti a ṣe ni C ++ 17, jẹ amuṣiṣẹpọ amuṣiṣẹpọ ti o fun laaye ọpọlọpọ awọn okun lati mu awọn titiipa pinpin (ka) ni nigbakannaa ni idaniloju wiwọle iyasoto fun awọn iṣẹ kikọ. O yanju ọkan ninu awọn ipenija concurrency ti o wọpọ julọ ni C++ ode oni nipa fifun awọn olupilẹṣẹ ni mimọ, ọna boṣewa lati ṣe imuse titiipa oluka-onkọwe laisi de ọdọ awọn ile ikawe ẹni-kẹta tabi awọn API kan pato.
Kini Gangan std::shared_mutex ati Kilode Ti A Fi Fikun-un ni C++17?
Ṣaaju C++17, awọn olupilẹṣẹ ti o nilo awọn atunmọ onkọwe-okọwe ni lati gbarale awọn ojutu kan pato iru ẹrọ bii pthread_rwlock_t lori awọn ọna ṣiṣe POSIX tabi SRWLOCK lori Windows, tabi wọn yoo lo awọn ile-ikawe ẹni-kẹta gẹgẹbi Boost. Igbimọ boṣewa C++17 mọ aafo yii wọn si ṣafihan std::shared_mutex ninu akọsori lati koju rẹ taara.
Ero pataki jẹ taara: ni ọpọlọpọ awọn eto gidi-aye, data ni a ka ni igbagbogbo ju ti a kọ lọ. Boṣewa std::shared_mutex gbe ihamọ yẹn soke nipa iyatọ laarin awọn ọna titiipa meji:
- Titiipa Pipin (ka) — ti ipasẹ
lock_shared(); ọpọ awọn okun le di eyi mu nigbakanna, ṣiṣe ni apẹrẹ fun awọn kika nigbakan. - Titiipa iyasoto (kọ) — ti a gba nipasẹ
titiipa(); Okùn okùn kan ṣoṣo ni o le mu eyi mu ni akoko kan, ko si si awọn titiipa pinpin ti a gba laaye lakoko ti o wa ni idaduro. - std::Titiipa pinpin — RAII wrapper ti o pe
lock_shared()lori ikole atiunlock_shared()lori iparun, idilọwọ awọn jijo orisun. - std::titiki alailẹgbẹ / std:: lock_guard — ti a lo pẹlu ipo iyasọtọ, aridaju pe awọn iṣẹ kikọ jẹ aabo ni kikun ati imukuro-ailewu.
Apẹrẹ-ipo meji yii jẹ ki std::shared_mutex ibaamu adayeba fun awọn oju iṣẹlẹ bii awọn caches, awọn iforukọsilẹ iṣeto, ati eto data eyikeyi nibiti awọn kika ti jẹ gaba lori fifuye iṣẹ.
Bawo ni O Ṣe Lo std::shared_mutex ni Koodu Gidi Pẹlu Awọn asọye?
Awọn asọye ninu koodu ti o nlo std::shared_mutex ṣe pataki ni pataki nitori pe imọ-ọrọ concurrency jẹ olokiki pupọ lati ronu nipa. Awọn asọye ti a gbe daradara ṣe alaye idia ti yan iru titiipa kan pato, eyiti o dinku eewu ti awọn olutọju iwaju lairotẹlẹ ṣafihan awọn ere-ije data. Eyi ni apẹrẹ aṣoju:
#pẹlu
#pẹlu
#pẹlu
Ilana iṣeto ni kilasi {
std mutable :: shared_mutex mtx_; // ṣe aabo maapu ni isalẹ
std :: unordered_map data_;
gbangba:
// Ka ipa ọna: ọpọ awọn okun le pe eyi ni igbakanna
std :: okun gba (const std :: okun & bọtini) const {
std :: titiipa titiipa pinpin (mtx_); // Titiipa pinpin - ailewu fun awọn kika nigbakanna
auto o = data_.find (bọtini);
da pada!= data_.pari()? it->keji :"";
}
// Kọ ona: iyasoto wiwọle beere
eto ofo (const std :: okun& bọtini, const std :: okun& val) {
std :: titiipa titiipa alailẹgbẹ (mtx_); // iyasoto titiipa - awọn bulọọki gbogbo awọn oluka
data_[bọtini] = val;
}
};
Ṣe akiyesi bi awọn asọye ṣe ṣe alaye idi ti o wa lẹhin yiyan titiipa kọọkan kuku ki a kan tun ohun ti koodu naa ṣe. Eyi ni boṣewa goolu: awọn asọye yẹ ki o dahun idi, kii ṣe kini. Koko-ọrọ mutable lori mutex ngbanilaaye gba() lati jẹ ikede const lakoko ti o tun le tii, ilana ti o wọpọ ati aṣa.
Ìjìnlẹ̀ Bọtini: Nigbagbogbo lo awọn titiipa titiipa RAII nigbagbogbo (
std :: titiipa_titiipa,std :: titiipa_otitọ) pẹlustd ::shared_mutex— maṣe petitiipa()atiṣii()pẹlu ọwọ. Titiipa afọwọṣe ni iwaju awọn imukuro jẹ ọna idaniloju si awọn titiipa ati ihuwasi aisọye.
Kini Awọn ipalara ti o wọpọ Nigbati Ṣiṣẹ Pẹlu std::shared_mutex?
Paapaa pẹlu awọn asọye ti o han gbangba ati awọn ero to dara, std::shared_mutex ni awọn ẹgẹ arekereke ti o fa awọn olupolowo ti o ni iriri soke. Ewu ti o lewu julọ niimudojuiwọn titiipa: ko si ọna ti a ṣe sinu lati ṣe igbesoke titiipa pinpin si titiipa iyasọtọ laisi idasilẹ ni akọkọ. Gbígbìyànjú láti ṣe bẹ́ẹ̀ láìsí ìtúsílẹ̀ yóò ṣẹ̀dá títìpa ní kíákíá nítorí pé okùn mú titiipa pínpín kan nígbà tí ó dúró dè titiipa iyasoto ti a ko le funni lae niwọn igba ti titiipa pinpin eyikeyi wa - pẹlu eyi ti o dimu.
💡 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 →Aṣiṣe miiran ti o wọpọ ni aabo granularity ti ko tọ. Awọn olupilẹṣẹ nigba miiran tiipa ni fifẹ pupọ, bibori idi ti apẹẹrẹ oluka-onkqwe, tabi dín ju, nlọ awọn window nibiti awọn iyatọ ti ṣẹ laarin awọn ohun-ini titiipa lọtọ meji. Awọn asọye ti o ṣapejuwe ayipada ti wa ni aabo, dipo ki o kan iyipada ti o wa ni titiipa, ṣe iranlọwọ fun awọn ẹgbẹ lati ronu nipa titọ lakoko atunyẹwo koodu.
Iṣe tun le ṣe ohun iyanu fun ọ. Lori awọn ọna ṣiṣe ti o ni ijiyan pupọ pẹlu ọpọlọpọ awọn onkọwe, std::shared_mutex le nitootọ ṣe buru ju std:mutex pẹlẹbẹ lọ nitori fifipamọ afikun si ori. Nigbagbogbo profaili ṣaaju ki o to ro pe titiipa-olukawe jẹ iṣẹgun apapọ.
Bawo ni std ::shared_mutex Ṣe afiwe si std :: mutex ati Awọn Yiyan miiran?
std::mutex rọrun, yiyara lati gba nigbati ariyanjiyan ba lọ silẹ, ati pe o yẹ nigbati kika ati kikọ waye ni iwọn igbohunsafẹfẹ deede. std::shared_mutex nmọlẹ nigbati o ba ka ni pataki ju nọmba ti o kọwe — 10:1 tabi ipin ti o ga julọ jẹ ofin atanpako ti o ni oye ṣaaju ki o to gbero iyipada naa.
C++14 ṣe agbekalẹ std::shared_timed_mutex, eyiti o ṣafikun try_lock_shared_for() ati try_lock_shared_titi di () fun awọn igbiyanju akoko. C ++ 17's std ::shared_timed_mutex wa ati pe awọn iru mejeeji jẹ boṣewa ni kikun.
Fun awọn omiiran ti ko ni titiipa, std :: atomiki ni idapo pẹlu iṣọra tito iranti le rọpo mutex nigba miiran fun awọn asia ti o rọrun tabi awọn iṣiro, ṣugbọn fun awọn ẹya data ti o nipọn, std:shared_mutex jẹ ojuutu ti o le ka julọ ati itọju ni ile-ikawe boṣewa.
Awọn ibeere Nigbagbogbo
Ṣé std ::shared_mutex le fa ebi bi?
Bẹẹni, o le. Ti awọn dimu titiipa pinpin tuntun ba n de nigbagbogbo, olubẹwẹ titiipa iyasoto le duro titilai — iṣoro kiki onkqweiṣoro. Iwọn C ++ ko ṣe aṣẹ eto imulo ododo kan pato, nitorinaa ihuwasi da lori imuse. Ni iṣe, pupọ julọ awọn imuṣẹ ile-ikawe boṣewa ṣe pataki awọn titiipa iyasoto ti o wa ni isunmọ ni kete ti wọn ba ti isinyi, ṣugbọn o yẹ ki o rii daju eyi fun ohun elo irinṣẹ pato ati pẹpẹ ti ebi ba jẹ ibakcdun ni iṣelọpọ.
Ṣé std ::shared_mutex ni ailewu lati lo pẹlu std ::condition_variable?
std::condition_variable nilo std::titikiki_oto, nitorinaa ko ni ibaramu taara pẹlu std::shared_mutex. Ti o ba nilo lati duro lori ipo kan lakoko ti o n mu mutex pinpin, lo std::condition_variable_ any, eyiti o ṣiṣẹ pẹlu eyikeyi iru BasicLockable, pẹlu std::shared_mutex so pọ pẹlu std::shared_lock.
Ṣe o yẹ ki n ṣafikun awọn asọye ni gbogbo igba ti MO lo std::shared_mutex?
Ni o kere ju, ṣe asọye asọye mutex lati ṣapejuwe iru data ti o ṣe aabo ati awọn iyatọ ti o ṣetọju. Ni aaye titiipa kọọkan, asọye kukuru kan ti n ṣalaye idi ti pinpin pẹlu iraye si iyasoto ṣe afikun iye pataki fun awọn oluyẹwo koodu ati awọn olutọju ọjọ iwaju. Awọn idun konrency wa laarin awọn ti o nira julọ lati ṣe ẹda ati ṣatunṣe, nitorinaa idoko-owo ni kedere, awọn asọye to tọ san awọn ipin ni ọpọlọpọ igba ju.
Ṣiṣakoso awọn ọna ṣiṣe eka - boya koodu C ++ nigbakanna tabi gbogbo iṣẹ iṣowo kan - nbeere awọn irinṣẹ to tọ ati eto ti o mọ. Mewayzjẹ 207-module iṣowo OS ti o gbẹkẹle nipasẹ awọn olumulo 138,000 lati mu iru alaye kanna si tita, CRM, e-commerce, atupale, ati diẹ sii, gbogbo rẹ ni ipilẹ kan ti o bẹrẹ ni $ 19 fun osu kan. Da juggling dosinni ti awọn irinṣẹ ti ge asopọ ati bẹrẹ ṣiṣe iṣowo rẹ pẹlu pipe ti sọfitiwia ti a ṣe apẹrẹ daradara. Gbiyanju Mewayz loni ni app.mewayz.com ki o si wo bi eto iṣọkan kan ṣe n yi ọna ti ẹgbẹ rẹ n ṣiṣẹ.
We use cookies to improve your experience and analyze site traffic. Cookie Policy