Std a thuiscint: Shared_mutex ó C++17
Tuairimí
Mewayz Team
Editorial Team
Std::shared_mutex ó C++17
a thuiscintstd::shared_mutex, a tugadh isteach in C++17, is primitive sioncrónaithe é a ligeann do il-snáithe glais roinnte (léamh) a choinneáil ag an am céanna agus rochtain eisiach á chinntiú le haghaidh oibríochtaí scríofa. Réitíonn sé ceann de na dúshláin chomhairgeadra is coitianta i C++ nua-aimseartha trí bhealach glan, caighdeánach a thabhairt d'fhorbróirí chun glasáil léitheoir-scríbhneoir a chur i bhfeidhm gan rochtain a fháil ar leabharlanna tríú páirtí nó APInna ardáin ar leith.
Cad go díreach atá std::shared_mutex agus Cén Fáth ar Cuireadh leis i C++17?
Roimh C++17, bhí ar fhorbróirí a raibh séimeantaic léitheoir-scríbhneoir ag teastáil uathu brath ar réitigh a bhain go sonrach le hardáin ar nós pthread_rwlock_t ar chórais POSIX nó SRWLOCK ar Windows, nó d'úsáidfeadh siad leabharlanna tríú páirtí ar nós Boost. D'aithin coiste caighdeánach C++17 an bhearna seo agus thug sé std::shared_mutex isteach sa cheanntásc chun aghaidh a thabhairt uirthi go díreach.
Tá an bunsmaoineamh simplí: i go leor clár sa saol fíor, déantar sonraí a léamh i bhfad níos minice ná mar a scríobhtar. Déanann std::mutex caighdeánach an rochtain ar fad — léitear san áireamh — a shraithiú, rud a chruthaíonn scrogaill neamhriachtanacha. Ardaíonn std::shared_mutex an srian sin trí idirdhealú a dhéanamh idir dhá mhodh glasála:
- Glas comhroinnte (léite) — faighte trí
lock_shared(); is féidir le snáitheanna iolracha é seo a choinneáil ag an am céanna, rud a fhágann go bhfuil sé oiriúnach le haghaidh léamh comhthráthach. - Glas (scríobh) eisiach — faighte trí
glas(); ní féidir ach snáithe amháin é seo a choinneáil ag an am céanna, agus ní cheadaítear glais roinnte ar bith agus é á choinneáil. - std::shared_lock — fillteán RAII a ghlaonn
lock_shared()ar thógáil agusunlock_shared()nuair a scriostar é, rud a chuireann cosc ar sceitheadh acmhainne. - std::unique_lock / std::lock_guard — a úsáidtear leis an mód eisiach, ag cinntiú go bhfuil na hoibríochtaí scríofa cosanta go hiomlán agus sábháilte ó thaobh eisceachta de.
Déanann an dearadh dé-mhód seo std::shared_mutex oiriúnach go nádúrtha do chásanna ar nós taisce, clárlanna cumraíochta, agus aon struchtúr sonraí a léitear chun tosaigh ar an ualach oibre.
Conas a Úsáidtear std::shared_mutex in Real Code Le Nótaí tráchta?
Tá tuairimí sa chód a úsáideann std::shared_mutex thar a bheith luachmhar mar go bhfuil sé deacair réasúnaíocht a dhéanamh faoi loighic chomhairgeadra. Léiríonn tuairimí dea-stiúrtha an cén fáth ar roghnaíodh cineál glas ar leith, rud a laghdaíonn go mór an baol go dtabharfaidh cothaitheoirí amach anseo rásaí sonraí isteach trí thimpiste. Seo patrún tipiciúil:
# cuir san áireamh
# cuir san áireamh
# cuir san áireamh
rang Cumraíochta {
std mutable::shared_mutex mtx_; // a chosnaíonn an léarscáil thíos
std::mapa_neamhordaithe data_;
poiblí:
// Conair léite: seans go dtabharfaidh snáitheanna iolracha é seo i gcomhthráth
std::string get(const std::string&key) const {
std:: glas roinnte_lock(mtx_); // glas roinnte — sábháilte le haghaidh léamh comhthráthach
uathoibríoch é = data_.find(eochair);
ais é!= data_.end() ? é->dara:"";
}
// Cosán a scríobh: rochtain eisiach ag teastáil
tacar neamhní (const std:: teaghrán&eochair, const std :: teaghrán& val) {
std :: glas glas uathúil (mtx_); // glas eisiach — blocálann gach léitheoir
sonraí_[eochair] = val;
}
};
Tabhair faoi deara mar a mhíníonn na tuairimí an rún atá taobh thiar de gach rogha glais seachas díreach a bheith ag athrá cad a dhéanann an cód. Seo é an caighdeán óir: ba cheart go bhfreagródh tuairimí cén fáth, ní cad. Ligeann an t-eochairfhocal mutable ar an mutex get() a dhearbhú const agus é fós in ann patrún coitianta agus gnáthghnáthach a ghlasáil.
Eochair-léargas: Bain úsáid as cumhdaigh ghlais RAII i gcónaí (
std::shared_lock,std::unique_lock) lestd::shared_mutex- ná cuir glaoch arlock()agusdíghlasáil()de láimh. Is cosán ráthaithe é glasáil láimhe i láthair na n-eisceachtaí chuig sábhálacha agus iompar neamhshainithe.
Cad iad na Gaistí Coitianta agus tú ag Obair Le std::shared_mutex?
Fiú amháin le tuairimí soiléire agus dea-rún, tá gaistí caolchúiseacha ag std::shared_mutex a théann ar aghaidh chuig forbróirí a bhfuil taithí acu. Is é an rud is contúirtí ná uasghrádú glasála: níl aon bhealach ionsuite ann chun glas comhroinnte a uasghrádú go glas eisiach gan é a scaoileadh ar dtús. Nuair a dhéantar iarracht é sin a dhéanamh gan é a scaoileadh cruthaítear stop láithreach toisc go bhfuil glas comhroinnte ag an snáithe agus é ag fanacht leis an glas eisiach nach féidir a dheonú go brách fad is atá aon ghlas roinnte ann - lena n-áirítear an ceann atá ar a sheilbh.
💡 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 →Botún coitianta eile is ea an gráinneacht mícheart a chosaint. Uaireanta déanann forbróirí glasáil ró-leathan, rud a sháraíonn cuspóir an phatrún léitheoir-scríbhneoir, nó ró-chúng, ag fágáil fuinneoga ina sáraítear malairtí idir dhá éadáil ghlais ar leith. Cabhraíonn tuairimí a chuireann síos ar an athróg atá á chosaint, seachas an athróg amháin a bheith faoi ghlas, le cúis a thabhairt do na foirne maidir le cirteachas le linn athbhreithniú an chóid.
Cuireann feidhmíocht iontas ort freisin. Ar chórais a bhfuil an-chonspóid ag baint leo ina bhfuil go leor scríbhneoirí, d'fhéadfadh go n-éireoidh std::shared_mutex níos measa ná gnáth-std::mutex mar gheall ar an lastuas leabharchoimeád breise. Próifíl i gcónaí sula nglacfar leis gur bua glan é glasáil léitheoir-scríbhneoir.
Conas a chuirtear std::shared_mutex i gcomparáid le std::mutex agus Roghanna Eile Eile?
Tástd::mutex níos simplí, níos tapúla le fáil nuair a bhíonn an chonspóid íseal, agus is cuí nuair a léitear agus nuair a bhíonn léamh agus scríobh ag tarlú ag an mhinicíocht a bheag nó a mhór. Shineann std::shared_mutex nuair a léitear go suntasach níos mó ná líon na n-scríbhinní - is riail réasúnach é cóimheas 10:1 nó níos airde sula ndéantar an lasc a mheas.
Thug C++14 isteach std::shared_timed_mutex, a chuireann try_lock_shared_for() agus try_lock_shared_until() leis le haghaidh iarrachtaí amaithe. Titeann std::shared_mutex C++17 na leaganacha uainithe le haghaidh cur i bhfeidhm níos barainní. Má theastaíonn glasáil amaithe uait ar an gcosán roinnte, tá std::shared_timed_mutex fós ar fáil agus tá an dá chineál iomlán caighdeánach.
I gcás roghanna eile saor ó ghlas, is féidir std::atomic in éineacht le hordú cuimhne cúramach a chur in ionad mutex go hiomlán le haghaidh bratacha nó cuntair shimplí, ach i gcás struchtúir sonraí casta, is é std::shared_mutex an réiteach is inléite agus is inchothaithe sa ghnáthleabharlann.
Ceisteanna Coitianta
An féidir std::shared_mutex a bheith ina chúis leis an ocras?
Is féidir, is féidir. Má leanann sealbhóirí glasa comhroinnte nua ag teacht go leanúnach, féadfaidh iarrthóir glasála eisiach fanacht ar feadh tréimhse éiginnte - fadhb clasaiceach ocras an scríbhneoir. Ní shainordaíonn an caighdeán C++ beartas cothroime sonrach, mar sin braitheann an iompar ar an gcur chun feidhme. Go praiticiúil, tugann an chuid is mó d'fheidhmiúcháin chaighdeánacha leabharlainne tús áite do ghlais eisiacha a luaithe a bhíonn siad ciúáilte, ach ba cheart duit é seo a fhíorú le haghaidh do shainshlabhra uirlisí agus ardán má tá an t-ocras ina ábhar imní i dtáirgeadh.
An bhfuil std::shared_mutex sábháilte le húsáid le std::coinníoll_athraitheach?
Tástd::unique_lock ag teastáil ó std::condition_variable, mar sin níl sé comhoiriúnach go díreach le std::shared_mutex. Más gá duit fanacht ar choinníoll agus mutex comhroinnte á shealbhú agat, úsáid std::condition_variable_any, a oibríonn le haon chineál BasicLockable, lena n-áirítear std::shared_mutex péireáilte le std::shared_lock.
Ar cheart dom nótaí tráchta a chur leis gach uair a úsáidim std::shared_mutex?
Ar a laghad, déan trácht ar dhearbhú an mutex chun cur síos a dhéanamh ar na sonraí a chosnaíonn sé agus na malairtí a choinníonn sé. Ag gach suíomh glas, cuireann trácht gairid a mhíníonn cén fáth ar roghnaíodh rochtain chomhroinnte i gcomparáid le rochtain eisiach luach suntasach d’athbhreithneoirí cóid agus do chothaitheoirí amach anseo. Tá fabhtanna comhairgeadra ar na cinn is deacra a atáirgeadh agus a shocrú, mar sin íocann infheistíocht i dtuairimí soiléire beachta díbhinní i bhfad níos mó.
Tá na huirlisí cearta agus an struchtúr soiléir ag teastáil chun córais chasta a bhainistiú - cibé acu an cód C++ comhthráthach nó oibríocht ghnó iomlán é. Is é Mewayz an OS gnó 207-modúl a bhfuil muinín ag breis is 138,000 úsáideoir as chun an tsoiléireacht chéanna sin a thabhairt do mhargaíocht, CRM, ríomhthráchtáil, anailísíocht agus go leor eile, ar fad in aon ardán amháin ag tosú ag díreach $19 in aghaidh na míosa. Stop juggling an iliomad uirlisí dícheangailte agus tús a chur le do ghnó a reáchtáil le beachtas na bogearraí dea-dheartha. Bain triail as Mewayz inniu ag app.mewayz.com agus féach conas a athraíonn córas aontaithe an chaoi a n-oibríonn d’fhoireann.
We use cookies to improve your experience and analyze site traffic. Cookie Policy