A’ tuigsinn Std: Shared_mutex bho C ++17
Beachdan
Mewayz Team
Editorial Team
Tuigse std::shared_mutex o C++17
std ::shared_mutex, air a thoirt a-steach ann an C++17, na phrìomhachas sioncronaidh a leigeas le iomadh snàithlean glasan co-roinnte (leugh) a chumail aig an aon àm fhad ‘s a nì iad cinnteach gum bi ruigsinneachd a-mhàin airson gnìomhan sgrìobhaidh. Bidh e a’ fuasgladh aon de na dùbhlain concurrency as cumanta ann an C ++ an latha an-diugh le bhith a’ toirt dòigh ghlan, àbhaisteach do luchd-leasachaidh glasadh leughadair-sgrìobhadair a chuir an gnìomh gun a bhith a’ ruighinn gu leabharlannan treas-phàrtaidh no APIan àrd-ùrlair.
Dè dìreach a th’ ann an std::shared_mutex agus Carson a chaidh a chur ris ann an C++17?
Ron C++17, b’ fheudar do luchd-leasachaidh aig an robh feum air semantics leughadair-sgrìobhaidh a bhith an urra ri fuasglaidhean a bha sònraichte don àrd-ùrlar mar pthread_rwlock_t air siostaman POSIX no SRWLOCK air Windows, no cleachdaidh iad leabharlannan treas-phàrtaidh leithid Boost. Dh’aithnich a’ chomataidh àbhaisteach C++17 am beàrn seo agus thug iad a-steach std::shared_mutex anns a’ bhann-cinn gus dèiligeadh ris gu dìreach.
Tha am prìomh bheachd sìmplidh: ann am mòran phrògraman san t-saoghal fhìor, thathas a’ leughadh dàta fada nas trice na tha e sgrìobhte. Bidh std::mutex àbhaisteach a’ sreathachadh a h-uile ruigsinneachd - leughaidhean air an toirt a-steach - a chruthaicheas botail neo-riatanach. Togaidh std::shared_mutex an cuingeachadh sin le bhith ag eadar-dhealachadh eadar dà mhodh glasaidh:
- Glais roinnte (leugh) - air fhaighinn tro
lock_shared(); 's urrainn dha ioma-snàthainn seo a chumail aig an aon àm, ga dhèanamh air leth freagarrach airson leughaidhean aig an aon àm. - Glais shònraichte (sgrìobh) - air fhaighinn tro
glas(); chan fhaod ach aon snàthainn seo a chumail aig aon àm, agus chan eil glasan co-roinnte ceadaichte fhad 's a tha e ga chumail. - std ::shared_lock - pasgan RAII a chuireas fios gu
lock_shared()air an togail agusunlock_shared()nuair a thèid a sgrios, a' cur casg air aoidion ghoireasan. - std ::unique_lock / std::lock_guard - air a chleachdadh leis a' mhodh a-mhàin, a' dèanamh cinnteach gu bheil obraichean sgrìobhaidh làn dhìon is sàbhailte a-mhàin.
Tha an dealbhadh dà-mhodh seo a’ fàgail std::shared_mutex gu nàdarrach iomchaidh airson suidheachaidhean leithid tasgadan, clàran rèiteachaidh, agus structar dàta sam bith far a bheil leughaidhean a’ faighinn làmh an uachdair air an eallach obrach.
Ciamar a chleachdas tu std::shared_mutex ann am Fìor Chòd le Beachdan?
Tha beachdan sa chòd a chleachdas std::shared_mutex gu sònraichte luachmhor a chionn ’s gu bheil loidsig airgead-crìche gu math duilich a reusanachadh mu dheidhinn. Tha beachdan ann an deagh shuidheachadh a’ soilleireachadh carson a chaidh seòrsa glas sònraichte a thaghadh, a lùghdaicheas gu mòr an cunnart gun toir luchd-gleidhidh san àm ri teachd rèisean dàta a-steach gun fhiosta. Seo pàtran àbhaisteach:
# cuir a-steach
# cuir a-steach
# cuir a-steach
clas ConfigRegistry {
mutable std ::shared_mutex mtx_; // a’ dìon a’ mhapa gu h-ìosal
std ::unordered_map data_;
poblach:
// Slighe leughaidh: faodaidh ioma-snàithlean a bhith ag ainmeachadh seo aig an aon àm
std :: string get (const std :: string & key) const {
std :: glas roinnte_lock (mtx_); // glas co-roinnte - sàbhailte airson leughaidhean co-aontach
auto it = data_.find(key);
thoir air ais e!= data_.end() ? it-> an dàrna : "";
}
// Sgrìobh slighe: tha feum air ruigsinneachd sònraichte
seata falamh (const std :: sreang & iuchair, const std :: sreang & val) {
std::unique_lock glas (mtx_); // glas toirmeasgach - a’ bacadh a h-uile leughadair
data_[iuchair] = val;
}
};
Thoir an aire mar a tha na beachdan a’ mìneachadh an rùn air cùl gach roghainn glasaidh seach dìreach ag ath-aithris na bhios an còd a’ dèanamh. Seo an inbhe òir: bu chòir do bheachdan freagairt carson, chan e dè. Tha am prìomh fhacal mutable air an mutex a’ leigeil le get() a ghairm const fhad ‘s a tha e comasach fhathast pàtran cumanta is gnàthasach a ghlasadh.
Prìomh shealladh: Cleachd pasgain glasaidh RAII an-còmhnaidh (
std::shared_lock,std::unique_lock) lestd::shared_mutex- na cuir fòn gulock()agusfuasgail()le làimh. Tha glasadh làimhe an làthair eisgeachdan na shlighe cinnteach gu glasan-stad agus giùlan neo-mhìnichte.
Dè na duilgheadasan a tha cumanta nuair a bhios tu ag obair le std ::shared_mutex?
Fiù ‘s le beachdan soilleir agus deagh rùn, tha glacaidhean seòlta aig std::shared_mutex a bhios a’ dol suas luchd-leasachaidh eòlach. 'S e àrdachadh glas an rud as cunnartaiche: chan eil dòigh ann airson glas co-roinnte àrdachadh gu glas air leth gun a leigeil ma sgaoil an toiseach. Le bhith a’ feuchainn ri sin a dhèanamh gun a bhith air a leigeil ma sgaoil cruthaichidh sin glasadh sa bhad leis gu bheil an t-snàthainn a’ cumail glas co-roinnte fhad ‘s a tha e a’ feitheamh ris a ’ghlas shònraichte nach gabh a thoirt seachad fhad‘ s a tha glas co-roinnte ann - a ’toirt a-steach am fear a tha e a’ cumail.
💡 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 →'S e mearachd cumanta eile a bhith a' dìon na granularity ceàrr. Bidh luchd-leasachaidh uaireannan a’ glasadh ro fharsaing, a’ dèanamh a’ chùis air adhbhar pàtran an leughadair-leughaidh, no ro chumhang, a’ fàgail uinneagan far a bheilear a’ briseadh eadar-dhealachaidhean eadar dà ghlas fa-leth. Bidh beachdan a tha a’ toirt cunntas air an caochladair ga dhìon, seach dìreach an caochladair glaiste, a’ cuideachadh sgiobaidhean le bhith ag adhbharachadh a thaobh ceartachd rè sgrùdadh còd.
Faodaidh coileanadh iongnadh a dhèanamh ort cuideachd. Air siostaman far a bheil mòran sgrìobhadairean a’ gearan, dh’ fhaodadh std::shared_mutex coileanadh nas miosa na std::mutex sìmplidh ri linn nan cosgaisean glèidhidh a bharrachd. Dèan pròifil an-còmhnaidh mus gabh thu ris gur e buannachadh lom a th’ ann glasadh leughadair-sgrìobhadair.
Ciamar a tha std ::shared_mutex an coimeas ri std ::mutex agus roghainnean eile?
Thastd::mutex nas sìmplidhe, nas luaithe ri fhaighinn nuair a tha connspaid ìosal, agus iomchaidh nuair a bhios leughadh is sgrìobhadh a’ tachairt aig tricead co-ionann cha mhòr. Bidh std ::shared_mutex a’ deàrrsadh nuair a thèid a leughadh gu math nas àirde na na sgrìobhaidhean - tha co-mheas 10:1 no nas àirde na riaghailt òrdail reusanta mus beachdaich thu air an tionndadh.
Thug C++14 a-steach std::shared_timed_mutex, a chuireas ris try_lock_shared_for() agus try_lock_shared_until() airson oidhirpean le ùine. Bidh std> C ++17::shared_mutex a’ leigeil sìos na caochlaidhean tìmeil airson buileachadh nas caol. Ma tha feum agad air glasadh le ùine air an t-slighe cho-roinnte, tha std::shared_timed_mutex ri fhaighinn fhathast agus tha an dà sheòrsa gu tur àbhaisteach.
Airson roghainnean eile gun ghlas, faodaidh std::atomic còmhla ri òrdachadh cuimhne faiceallach uaireannan mutex a chur an àite brataichean no cunntairean sìmplidh, ach airson structaran dàta iom-fhillte, std::shared_mutex fhathast am fuasgladh as leughaidh agus as seasmhaiche san leabharlann àbhaisteach.
Ceistean Bitheanta
An urrainn std::shared_mutex acras adhbhrachadh?
Seadh, faodaidh. Ma chumas luchd-gleidhidh glas co-roinnte ùr a’ ruighinn an-còmhnaidh, faodaidh neach-iarrtais glas-glas feitheamh gun chrìoch - duilgheadas clasaigeach acras sgrìobhadair. Chan eil an inbhe C ++ ag òrdachadh poileasaidh cothromachd sònraichte, agus mar sin tha giùlan an urra ris a’ bhuileachadh. Ann an da-rìribh, tha a’ mhòr-chuid de bhuileachadh leabharlainn àbhaisteach a’ toirt prìomhachas do ghlasan toirmeasgach aon uair ‘s gu bheil iad ann an ciudha, ach bu chòir dhut seo a dhearbhadh airson an t-sèine inneal agus an àrd-ùrlar sònraichte agad ma tha an t-acras na adhbhar dragh ann an cinneasachadh.
A bheil std::shared_mutex sàbhailte a chleachdadh le std :: condition_variable?
Tha feum aigstd::unique_lock air std::condition_variable, 's mar sin chan eil e co-chòrdail gu dìreach ri std::shared_mutex. Ma dh'fheumas tu feitheamh air chumha fhad 's a tha thu a' cumail mutex co-roinnte, cleachd std::condition_variable_any, a dh'obraicheas le seòrsa BasicLockable sam bith, a' gabhail a-steach std::shared_mutex le paidhir le std::shared_lock.
Am bu chòir dhomh beachdan a chur ris a h-uile uair a chleachdas mi std::shared_mutex?
Aig a’ char as lugha, thoir beachd air foillseachadh an mutex gus innse dè an dàta a tha e a’ dìon agus na caochlaidhean a tha e a’ cumail. Aig gach làrach glasaidh, tha beachd goirid a’ mìneachadh carson a chaidh ruigsinneachd co-roinnte an-aghaidh ruigsinneachd toirmeasgach a thaghadh a’ cur luach mòr ri luchd-sgrùdaidh còd agus luchd-gleidhidh san àm ri teachd. Tha bugaichean concurrency am measg an fheadhainn as duilghe ath-riochdachadh agus a chàradh, agus mar sin tha tasgadh ann am beachdan soilleir, mionaideach a’ pàigheadh mòran thursan thairis.
Tha a bhith a’ riaghladh shiostaman iom-fhillte - ge bith an e còd C++ co-shìnte no gnìomhachd gnìomhachais slàn a th’ ann - ag iarraidh na h-innealan ceart agus structar soilleir. Is e Mewayz an OS gnìomhachais 207-modal anns a bheil earbsa aig còrr air 138,000 neach-cleachdaidh gus an aon soilleireachd sin a thoirt gu margaidheachd, CRM, e-malairt, anailisean agus barrachd, uile ann an aon àrd-ùrlar a’ tòiseachadh aig dìreach $19 sa mhìos. Stad le bhith a ’suathadh dusanan de dh’ innealan neo-cheangailte agus tòisich a ’ruith do ghnìomhachas le mionaideachd bathar-bog air a dheagh dhealbhadh. Feuch Mewayz an-diugh aig app.mewayz.com agus faic mar a dh’ atharraicheas siostam aonaichte an dòigh sa bheil an sgioba agad ag obair.
We use cookies to improve your experience and analyze site traffic. Cookie Policy