Hacker News

Okutegeera Std:Shared_mutex okuva ku C++17

Ebiteeso

7 min read Via www.cppstories.com

Mewayz Team

Editorial Team

Hacker News

Okutegeera std::shared_mutex okuva ku C++17

std::shared_mutex, eyatongozebwa mu C++17, ye primitive y'okukwataganya esobozesa thread eziwera okukwata omulundi gumu ebizibiti ebigabanyizibwa (okusoma) nga bwe bikakasa okuyingira okw'enjawulo ku mirimu gy'okuwandiika. Kigonjoola ekimu ku bisinga okusoomoozebwa mu kiseera kye kimu mu C++ ey’omulembe guno nga kiwa abakola engeri ennyonjo, ey’omutindo ey’okussa mu nkola okusiba omusomi-omuwandiisi awatali kutuuka ku tterekero ly’ebitabo ery’ekibiina eky’okusatu oba API ezikwata ku musingi.

Kiki Ddala std::shared_mutex era Lwaki Kyayongerwako mu C++17?

Nga C++17 tennabaawo, abakola abaali beetaaga amakulu g’omusomi-omuwandiisi baalina okwesigama ku bigonjoola ebikwata ku musingi nga pthread_rwlock_t ku nkola za POSIX oba SRWLOCK ku Windows, oba si ekyo bandikozesezza amaterekero g’ebitabo ag’abantu ab’okusatu nga Boost. Akakiiko k’omutindo gwa C++17 kategeera ekituli kino era ne kaleeta std::shared_mutex mu mutwe okukikola butereevu.

Endowooza enkulu nnyangu: mu pulogulaamu nnyingi ez’ensi entuufu, data esomebwa emirundi mingi nnyo okusinga bwe yawandiikibwa. Omutindo std::mutex gusengeka okuyingira kwonna — okusoma okuli — ekitondekawo ebizibu ebiteetaagisa. std::shared_mutex esitula okuziyiza okwo nga eyawula wakati w'engeri bbiri ez'okusiba:

  • Ekizibiti ekigabanyizibwa (okusoma) — kifunibwa nga kiyita mu lock_shared(); emiguwa mingi gisobola okukwata kino omulundi gumu, ekigifuula ekirungi ennyo okusoma mu kiseera kye kimu.
  • Ekizibiti eky’enjawulo (okuwandiika) — ekifunibwa okuyita mu lock(); thread emu yokka eyinza okukwata kino omulundi gumu, era tewali kkufulu ezigabibwa zikkirizibwa nga zikuumibwa.
  • std::shared_lock — ekizinga kya RAII ekiyita lock_shared() ku kuzimba ne unlock_shared() ku kuzikirizibwa, okuziyiza okuvuba kw'eby'obugagga.
  • std::unique_lock / std::lock_guard — ekozesebwa n'engeri ey'enjawulo, okukakasa nti emirimu gy'okuwandiika gikuumibwa mu bujjuvu era nga tegirina bulabe bwa kujjako.

Enkola eno ey'engeri bbiri efuula std::shared_mutex okutuukagana okw'obutonde eri embeera nga caches, configuration registries, n'ensengeka yonna eya data nga okusoma kwe kufuga omulimu.

Okozesa Otya std::shared_mutex mu Koodi Entuufu Nga Olina Ebiteeso?

Ebigambo mu koodi ekozesa std::shared_mutex bya mugaso nnyo kubanga ensonga y'okukwatagana emanyiddwa nnyo nga nzibu okukubaganya ebirowoozo. Ebigambo ebiteekeddwa obulungi bitangaaza lwaki ekika ky’ekizibiti ekimu kyalondebwa, ekikendeeza ennyo ku bulabe bw’abalabirira mu biseera eby’omu maaso okuleeta emisinde gya data mu butanwa. Wano waliwo enkola eya bulijjo:

#mutemu 
#okussaamu 
#ssaamu 

class Okutegeka Okuwandiisa { .
    ekikyukakyuka std::okugabana_mutex mtx_; // ekuuma maapu eri wansi
    std::maapu_etasengekeddwa data_;

mu lujjudde:
    // Ekkubo ly'okusoma: emiguwa mingi giyinza okuyita kino mu kiseera kye kimu
    std::omuguwa get (const std::omuguwa& ekisumuluzo) const {
        std::ekizibiti_eky'okugabana (mtx_); // shared lock — tewali bulabe eri okusoma mu kiseera kye kimu
        auto it = data_.zudde (ekisumuluzo);
        kizzeeyo != data_.end () ? it->ekyokubiri : "";
    }

    // Ekkubo ly'okuwandiika: okuyingira okw'enjawulo kwetaagisa
    void set (const std::omuguwa& ekisumuluzo, const std::omuguwa& val) {
        std::ekizibiti_eky'enjawulo (mtx_); // exclusive lock — eziyiza abasomi bonna
        data_[ekisumuluzo] = val;
    }
};

Weetegereze engeri ebigambo gye binnyonnyolamu ekigendererwa ekiri emabega wa buli kulonda kw'ekizibiti okusinga okuddamu okwogera kyokka koodi ky'ekola. Guno gwe mutindo gwa zaabu: ebiteeso birina okuddamu lwaki, so si kiki. Ekigambo ekikulu mutable ku mutex kikkiriza get() okulangirirwa const nga bakyasobola okusiba, enkola eya bulijjo era ey'enjogera.

Okutegeera Ebisumuluzo: Bulijjo kozesa ebizinga ebizibiti bya RAII (std::shared_lock, std::unique_lock) ne std::shared_mutex — toyita lock() ne unlock() mu ngalo. Okusiba mu ngalo mu kubeerawo kw'okujjako kkubo erikakasibwa erigenda mu bizibu n'enneeyisa etategeerekese.

nga bwe kiri

Mitego ki egya bulijjo ng'okola ne std::shared_mutex?

Ne bwe kiba nga waliwo ebigambo ebitegeerekeka obulungi n'ebigendererwa ebirungi, std::shared_mutex erina emitego egy'obutegeevu egikosa abakugu abalina obumanyirivu. Ekisinga okuba eky’obulabe ye okulongoosa kkufulu: tewali ngeri ezimbiddwamu ey’okulongoosa kkufulu egabanyizibwa ku kkufulu ey’enjawulo nga tosoose kugisumulula. Okugezaako okukikola nga tosumuludde kireeta obuzibu obw’amangu kubanga obuwuzi bukwata kkufulu egabanyizibwa nga bwe bulinda kkufulu ey’enjawulo etayinza kukkirizibwa kasita kkufulu yonna egabanyizibwa ebaawo — nga mw’otwalidde n’eyo gy’ekutte.

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

Ensobi endala etera okukolebwa kwe kukuuma granularity enkyamu. Abakola oluusi basibira mu bugazi nnyo, ne bawangula ekigendererwa ky’enkola y’omusomi-omuwandiisi, oba mu ngeri enfunda ennyo, ne baleka amadirisa awatali bikyukakyuka ebityoboolwa wakati w’okufunibwa kw’okusiba okubiri okw’enjawulo. Ebigambo ebinnyonnyola ekitali kikyuka ekikuumibwa, okusinga enkyukakyuka yokka ekubiddwa, biyamba ttiimu okukubaganya ebirowoozo ku butuufu mu kiseera ky’okuddamu okwetegereza koodi.

Okukola obulungi nakyo kisobola okukwewuunyisa. Ku nkola ezivuganya ennyo n'abawandiisi bangi, std::shared_mutex mu butuufu eyinza okukola obubi okusinga std::mutex eya bulijjo olw'omuwendo ogw'okutereka ebitabo ogw'okwongerako. Bulijjo profile nga tonnalowooza nti okusiba omusomi-omuwandiisi buwanguzi bwa net.

Std::shared_mutex Geraageranya Etya ku std::mutex n'Ebirala?

std::mutex kyangu, kyangu okufuna nga okukaayana kutono, era kisaanidde nga okusoma n'okuwandiika bibaawo ku mirundi egy'enkanankana. std::shared_mutex eyaka nga okusoma kusinga nnyo omuwendo — omugerageranyo gwa 10:1 oba okusingawo tteeka lya nsaamusaamu nga tonnalowooza ku kukyusa.

C++14 yaleeta std::shared_timed_mutex, eyongera try_lock_shared_for() ne try_lock_shared_until() okugezaako okuteekeddwa mu budde. C++17's std::shared_mutex esuula enjawulo eziteekeddwa mu budde olw'okussa mu nkola okugonvu. Bw'oba weetaaga okusiba obudde ku kkubo erigabanyizibwa, std::shared_timed_mutex esigala nga eriwo era ebika byombi bya mutindo mu bujjuvu.

Ku nkola endala ezitaliimu kkufulu, std::atomic nga egattibwa wamu n'okusengeka okujjukira n'obwegendereza oluusi esobola okukyusa mutex yonna ku bendera oba okubala ennyangu, naye ku nsengeka za data enzibu, std::shared_mutex esigala nga kye kigonjoola ekisinga okusomebwa n'okulabirira mu tterekero erya bulijjo.

Ebibuuzo Ebitera Okubuuzibwa

std::shared_mutex esobola okuleeta enjala?

Yee, kisobola. Singa abapya abalina kkufulu ezigabanyizibwa basigala nga batuuka obutasalako, omusaba kkufulu ey’enjawulo ayinza okulinda ekiseera ekitali kigere — ekizibu kya enjala y’omuwandiisi eya kalasi. Omutindo gwa C++ tegulagira nkola ya bwenkanya eyenjawulo, kale enneeyisa esinziira ku kussa mu nkola. Mu nkola, enkola z’etterekero ly’ebitabo ezisinga obungi zikulembeza ebizibiti eby’enjawulo ebiyimiridde nga bimaze okuteekebwa mu nnyiriri, naye kino olina okukakasa ku nkola yo ey’ebikozesebwa n’omukutu gwo singa enjala yeeraliikiriza mu kukola.

Std::shared_mutex nnungi okukozesa ne std::condition_variable?

std::condition_variable yeetaaga std::unique_lock, kale tekwatagana butereevu na std::shared_mutex. Bw’oba weetaaga okulinda ku mbeera ng’okwata mutex egabanyizibwa, kozesa std::condition_variable_any, ekola n’ekika kyonna ekya BasicLockable, omuli std::shared_mutex ekigatta ne std::shared_lock.

Nyongere ebigambo buli lwe nkozesa std::shared_mutex?

Ekitono, commenta okulangirira kwa mutex okunnyonnyola data ki gy'ekuuma n'ebitakyukakyuka by'ekuuma. Ku buli kifo kya kkufulu, okuteesa okumpimpi okunnyonnyola lwaki okuyingira okugabibwa okusinziira ku kuyingira okw’enjawulo kwalondebwa kyongera omugaso omunene eri abeekenneenya koodi n’abalabirira mu biseera eby’omu maaso. Ebizibu ebikwatagana mu kiseera kye kimu bye bimu ku bizibu okuzaala n’okutereeza, kale okuteeka ssente mu bigambo ebitegeerekeka obulungi, ebituufu kusasula amagoba emirundi mingi.


Okuddukanya enkola enzibu — oba koodi ya C++ ey’omu kiseera kye kimu oba enkola ya bizinensi yonna — kyetaagisa ebikozesebwa ebituufu n’ensengeka entegeerekeka. Mewayz ye OS ya bizinensi eya modulo 207 eyesigika abakozesa abasoba mu 138,000 okuleeta okutegeera okwo kwe kumu mu by’okutunda, CRM, e-commerce, okwekenneenya, n’ebirala, byonna mu nkola emu nga bitandikira ku doola 19 zokka buli mwezi. Lekera awo okujugumira ebikozesebwa ebikumi ebikutuddwako otandike okuddukanya bizinensi yo n’obutuufu bwa pulogulaamu ezikoleddwa obulungi. Gezaako Mewayz leero ku app.mewayz.com olabe engeri enkola ey’obumu gy’ekyusa engeri ttiimu yo gy’ekola.

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