Hacker News

Kososola Std:Shared_mutex uta na C++17

Ba commentaires

9 min read Via www.cppstories.com

Mewayz Team

Editorial Team

Hacker News

Kososola std::shared_mutex uta na C++17

std::shared_mutex, ekotisami na C++17, ezali primitif ya synchronisation oyo epesaka nzela na ba threads ebele esimba mbala moko ba serrures ya kokabola (kotanga) tango ezali ko assurer accès exclusif mpo na ba opérations ya kokoma. Ezali kosilisa moko ya mikakatano ya concurrence oyo emonanaka mingi na C++ ya mikolo oyo na kopesaka ba développeurs lolenge ya peto, ya standard ya kosalela bokangami ya motángi-mokomi kozanga kosimba ba bibliothèques ya bato mosusu to ba APIs spécifiques ya plateforme.

Nini Ezali Penza std::shared_mutex mpe Mpo na nini Ebakisami na C++17?

Yambo ya C++17, ba développeurs oyo bazalaki na besoin ya sémantique ya motángi-mokomi basengelaki kotia motema na ba solutions spécifiques ya plateforme lokola pthread_rwlock_t na ba systèmes POSIX to SRWLOCK na Windows, soki te bakosalela ba bibliothèques ya troisième partie lokola Boost. Comité ya norme ya C++17 eyebaki bokeseni oyo mpe ekotisaki std::shared_mutex na motó ya mpo na kosilisa yango mbala moko.

Likanisi ya moboko ezali semba : na ba programme mingi ya mokili ya solo, ba données etangamaka mingi koleka ndenge ekomami. std::mutex ya momesano ebongisi nzela ya bokɔti nyonso — botangi ekotisami — oyo esali ba goulets d’étranglement oyo ezali na ntina te. std::shared_mutex etomboli epekiseli wana na kokesenisa kati ya ndenge mibale ya bokangami:

  • Bokangami ya kokabola (kotanga) — ezwami na nzela ya lock_shared(); ba threads ebele ekoki kosimba yango na mbala moko, kosala yango malamu mpo na botangi ya mbala moko.
  • Bokangami ya (kokoma) ya bobele moko — ezwami na nzela ya lock(); kaka nsinga moko nde ekoki kokanga yango na mbala moko, mpe ba serrures ya kokabola epesami nzela te tango esimbami.
  • std::shared_lock — enveloppe ya RAII oyo ebengaka lock_shared() na botongi mpe unlock_shared() na bobebisi, kopekisa ba fuites ya ressource.
  • std::unique_lock / std::lock_guard — esalelamaka na mode exclusif, kosala ete misala ya kokoma ebatelami mobimba mpe ezala na bokengi ya exception.

Bokeli oyo ya mode mibale ekomisaka std::shared_mutex boyokani ya bomoto mpo na ba scénarios lokola ba caches, ba registres ya configuration, mpe structure nionso ya ba données esika ba lectures e dominaka charge ya mosala.

Ndenge nini Osalelaka std::shared_mutex na Code ya solosolo na ba commentaires?

Ba commentaires na code oyo esalelaka std::shared_mutex ezali na motuya mingi mpo logique ya concurrence ezali notoirement difficile ya ko raisonner. Maloba oyo etyami malamu emonisaka polele mpo na nini lolenge moko ya kokangama eponami, oyo ekitisaka mpenza likama ya ete bato oyo bakobatela na mikolo ezali koya bakokɔtisa na mbalakaka ba races ya ba données. Tala motindo moko ya momesano:

#kokɔtisa #kokɔtisa #kokɔtisa classe ConfigRegistre { . std oyo ekoki kobongwana::mutex_ekabolami mtx_; // ebatelaka karte oyo ezali awa na nse std::karte_oyo ezali na molɔngɔ te ba données_; public: // Nzela ya kotanga: ba threads ebele ekoki kobenga oyo na mbala moko std::molongo kozwa (const std::molongo& fungola) const { std::lock_lock ya kokabola (mtx_); // lock ya kokabola — ezali na likama te mpo na botangi ya mbala moko auto yango = ba données_.luka (fungola); zongisa yango != data_.nsuka () ? yango->ya mibale : ""; } . // Nzela ya kokoma: accès exclusif esengeli void set (const std::molongo& fungola, const std::molongo& val) { std::blocage_unique_lock (mtx_); // lock exclusif — ekangaka batángi nyonso ba données_[fungola] = val; } . };

Tala ndenge ba commentaires elimboli intention oyo ezali sima ya choix moko na moko ya lock na esika ya kozongela kaka oyo code esalaka. Oyo ezali motindo ya wolo: makanisi esengeli koyanola na mpo na nini, kasi te nini. Liloba ya ntina mutable na mutex epesi nzela na get() esakolama const tango ezali naino na makoki ya kokanga, motindo ya momesano mpe ya idiomatique.

Bososoli ya ntina: Salelá ntango nyonso ba enveloppes ya bokangami ya RAII (std::shared_lock, std::unique_lock) na std::shared_mutex — benga ata moke te lock() mpe unlock() na maboko. Bokangami ya maboko na bozali ya ba exceptions ezali nzela ya garantie mpo na ba impasse mpe bizaleli oyo elimbolami te.

, oyo ezali

Mitambo nini oyo emonanaka mingi ntango ozali kosala na std::shared_mutex?

Ata na ba commentaires ya polele mpe na ba intentions ya malamu, std::shared_mutex ezali na ba pièges subtiles oyo ezo tripler ba développeurs expérimentés. Likama mingi ezali matisami ya bokangami: ezali na lolenge moko te oyo etongami mpo na kotombola bokangami ya kokabola na bokangami ya bobele moko kozanga kobimisa yango liboso. Komeka kosala yango kozanga kobimisa esali impasse ya mbala moko mpo ete nsinga esimbaka serrure ya kokabola ntango ezali kozela serrure exclusif oyo ekoki kopesama ata moke te soki serrure nionso ya kokabola ezali — bakisa mpe oyo ezali kosimba.

💡 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 →

Libunga mosusu oyo esalemaka mingi ezali kobatela granularité ya mabe. Ba développeurs ba kangaka tango mosusu na largeur mingi, balongaka tina ya modèle ya motángi-mokomi, to na ndenge ya moke mingi, batikaka ba fenêtres esika ba invariants e violer entre deux acquisitions ya blocage ekeseni. Maloba oyo ezali kolimbola invariant oyo ebatelami, na esika ya kozala kaka variable oyo ekangami, esalisaka ba équipes kokanisa na ntina ya bosolo na tango ya botali ya code.

Performance ekoki pe kokamwisa yo. Na ba systèmes oyo ezali na matata mingi na bakomi mingi, std::shared_mutex ekoki mpenza kosala mabe koleka std::mutex ya pamba mpo na mbongo ya bobateli mikanda ya kobakisa. Toujours profil avant ya ko assumer que blocage ya motángi-mokomi ezali elonga ya net.

Ndenge nini std::shared_mutex Kokokanisa na std::mutex mpe Ba Alternatives mosusu?

std::mutex ezali pete, noki mpo na kozwa ntango matata ezali moke, mpe ebongi ntango botangi mpe kokoma esalemaka na fréquence pene na ndenge moko. std::shared_mutex engɛngaka ntango botangi eleki mingi motango ya bokomi — ratio ya 10:1 to koleka ezali mobeko ya malamu yambo ya kotalela bobongoli.

C++14 ekotisaki std::shared_timed_mutex, oyo ebakisi try_lock_shared_for() mpe try_lock_shared_until() mpo na komeka na tango. std::shared_mutex ya C++17 ebwakaka ba variantes ya temps mpo na mise en œuvre ya pete. Soki ozali na mposa ya bokangami ya ntango na nzela ya kokabola, std::shared_timed_mutex etikali mpe mitindo nyonso mibale ezali mobimba ya momesano.

Mpo na ba alternatives sans blocage, std::atomic esangani na ordre ya mémoire ya bokebi ekoki tango mosusu ko remplacer mutex mobimba pona ba drapeaux to ba compteurs ya pete, kasi pona ba structures ya ba données complexes, std::shared_mutex etikali solution oyo ekoki kotangama pe ko maintenir mingi na bibliothèque standard.

Mituna oyo batunaka mingi

Ekoki std::shared_mutex kosala nzala?

Ee, ekoki. Soki ba détenteurs ya sika ya blocage partagé bazali kokoba koya ntango nyonso, mosengi ya blocage exclusif akoki kozela mpo na ntango oyo etyami ndelo te — mokakatano ya kala ya nzala ya mokomi. Norme ya C++ epesi te mandat ya politique spécifique ya justice, yango wana comportement etali mise en œuvre. Na misala, mingi ya ba mise en œuvre ya bibliothèque standard e prioritiser ba serrures exclusifs en attente une fois que ezala na molongo, kasi esengeli o vérifier yango pona chaîne d'outils spécifique na plateforme na yo soki nzala ezali soucis na production.

Ezali std::shared_mutex na bokengi mpo na kosalela na std::condition_variable?

std::variable_condition esengaka std::unique_lock, yango wana ekokani mbala moko te na std::shared_mutex. Soki osengeli kozela na condition tango ozali kosimba mutex ya kokabola, salelá std::condition_variable_any, oyo esalaka na lolenge nyonso ya BasicLockable, bakisa mpe std::shared_mutex oyo esanganami na std::shared_lock.

Nasengeli kobakisa makanisi mbala nyonso oyo nasalelaka std::shared_mutex?

Na moke, commenter déclaration ya mutex pona kolimbola ba données nini ebatelaka pe ba invariants oyo e maintenir. Na esika moko na moko ya kokanga, commentaire mokuse oyo ezali kolimbola mpo na nini accès ya kokabola versus accès exclusif eponami ebakisi motuya monene mpo na batali ya code mpe ba entretien ya mikolo ekoya. Ba bugs ya concurrence ezali parmi ba oyo ezali pasi pona ko reproduire pe ko bongisa, yango wana investissement na ba commentaires ya polele, ya précision efutaka dividende mbala ebele.


na yango

Kokamba ba systèmes complexes — ezala code C++ concurrent to fonctionnement mobimba ya entreprise — esengaka bisaleli ya malamu pe structure ya polele. Mewayz ezali OS ya mombongo ya module 207 oyo basaleli koleka 138.000 batyelaka motema mpo na komema polele wana kaka na marketing, CRM, e-commerce, analyse, mpe mingi mosusu, nyonso na plateforme moko kobanda kaka na $19 na sanza. Tika kosala ba jongleries ya ba douzaines ya ba outils disconnectés mpe banda ko diriger entreprise na yo na précision ya logiciel bien conçu. Meka Mewayz lelo na app.mewayz.com mpe tala ndenge nini système unifié ebongoli lolenge ekipi na yo esalaka.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

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 →

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