Hacker News

Kunzwisisa Std:Shared_mutex kubva kuC++17

Comments

6 min read Via www.cppstories.com

Mewayz Team

Editorial Team

Hacker News

Kunzwisisa std::shared_mutex kubva kuC++17

std::shared_mutex, yakaunzwa muC++17, ndeye synchronization primitive inobvumira tambo dzakawanda kuti dzibate panguva imwe chete makiyi akagovaniswa (kuverenga) uku uchivimbisa kuwana kwakasarudzika kwemaitiro ekunyora. Inogadzirisa rimwe rematambudziko emari muC++ yemazuva ano nekupa vagadziri nzira yakachena, yakajairwa yekushandisa kukiya kwevaverengi-vanyori pasina kusvika kumaraibhurari ebato rechitatu kana maAPI akasarudzika.

Chii Chaizvo std::shared_mutex uye Sei Yakawedzerwa muC++17?

C++17 isati yasvika, vagadziri vaida semantics yevaverengi-vanyori vaifanira kuvimba nemhinduro dzakananga papuratifomu septhread_rwlock_t paPOSIX masisitimu kana SRWLOCK paWindows, kana kuti vaizoshandisa maraibhurari ebato rechitatu seBoost. C++17 standard committee yakaona gap iri rikasuma std::shared_mutex mumusoro we kuti rigadzirise.

Pfungwa yepakati yakatwasuka: muzvirongwa zvakawanda zvepasirese, data inoverengwa kakawanda kupfuura yakanyorwa. Yakajairwa std::mutex inoteedzera kuwana kwese - kuverenga kunosanganisirwa - izvo zvinogadzira zvisingaite mabhodhoro. std::shared_mutex inosimudza zvirambidzo izvozvo nekusiyanisa nzira mbiri dzekukiya:

  • Yakagovaniswa (verenga) kiyi — yakawanikwa kuburikidza ne lock_shared(); shinda dzakawanda dzinogona kubata izvi panguva imwe chete, zvichiita kuti zvive zvakanaka pakuverenga panguva imwe chete.
  • Exclusive (nyora) lock — inowanikwa kuburikidza ne lock(); shinda imwe chete inogona kubata izvi panguva, uye hapana makiyi akagovaniswa anotenderwa payakabatwa.
  • std::shared_lock — RAII wrapper inodaidzira lock_shared() pakuvaka uye unlock_shared() pakuparadza, kudzivirira kudonha kwezviwanikwa.
  • std::unique_lock / std::lock_guard — inoshandiswa nemhando yakasarudzika, kuve nechokwadi chekuti manyorerwo akachengetedzwa zvizere uye anochengeteka.

Iyi dhizaini yemhando mbiri inoita kuti std::shared_mutex ienderane nemamiriro ezvinhu senge cache, maregistries ekugadzirisa, uye chero chimiro chedata chinoverengerwa chinotungamira basa.

Unoshandisa Sei std::shared_mutex muReal Code NeMaonero?

Maonero mukodhi anoshandisa std::shared_mutex akanyanya kukosha nekuti concurrency logic ine mukurumbira wakaoma kufunga nezvazvo. Tsinhiro dzakaiswa zvakanaka dzinojekesanei rudzi rwakati rwekiyi rwakasarudzwa, izvo zvinoderedza zvikuru njodzi yevanochengetedza ramangwana vanounza netsaona mijaho yedata. Heino maitiro akajairika:

#include 
#isanganisira 
#kusanganisira 

kirasi ConfigRegistry {
    mutable std::shared_mutex mtx_; // inodzivirira mepu iri pazasi
    std::unordered_map data_;

paruzhinji:
    // Verenga nzira: tambo dzakawanda dzinogona kudana izvi panguva imwe chete
    std :: tambo tora (const std:: tambo & kiyi) const {
        std::shared_lock lock(mtx_); // yakagovaniswa kukiya - yakachengeteka kuti iverenge pamwe chete
        auto it = data_.find(kiyi);
        return it != data_.end() ? it->yechipiri : "";
    }

    // Nyora nzira: kuwanikwa kwega kunodiwa
    void set (const std :: tambo & kiyi, const std :: tambo & val) {
        std::yakasarudzika_kukiya kukiya(mtx_); // yakasarudzika kukiya - inovhara vese vaverengi
        data_[kiyi] = val;
    }
};

Cherechedza kuti macomments anotsanangura sei chinangwa chekiyi yega yega sarudzo pane kungodzokorora zvinoitwa nekodhi. Uyu ndiwo mwero wegoridhe: mhinduro dzinofanira kupindura nei, kwete chii. The mutable keyword iri pa mutex inobvumira get() kunzi consst uchiri kukwanisa kukiya, common and idiomatic pattern.

Key Insight: Gara shandisa RAII yekuvharisa mapepa (std::shared_lock, std::unique_lock) ne std::shared_mutex — usafe wakafona lock() uye vhura() iwe pachako. Kuvharika nemaoko pamberi pezvisizvo inzira yakavimbiswa kune zvakafa uye maitiro asina kutsanangurwa.

Ndedzipi Dzakajairwa Pitfalls Kana Uchishanda ne std::shared_mutex?

Kunyangwe paine mashoko akajeka uye vavariro dzakanaka, std::shared_mutex ine misungo isina kujeka inokwirisa vagadziri vane ruzivo. Chinonyanya kutyisa ndeyekiyi kusimudzira: hapana yakavakirwa-mukati nzira yekusimudzira kukiya yakagovaniswa kune yakasarudzika kiyi pasina kuiburitsa kutanga. Kuedza kuita izvi usina kuburitsa kunokonzeresa kuti pave nekukasira nekuti tambo inobata kiyi yakagovaniswa uchimirira kiyi yega iyo isingambogone kupihwa chero kiyi yakagovaniswa iripo - kusanganisira neyayakabata.

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

Imwe mhosho yakajairika ndeyekuchengetedza iyo isiriyo granularity. Vagadziri dzimwe nguva vanokiya zvakanyanya, vachikunda chinangwa chemuverengi-munyori pateni, kana nepadiki, achisiya mahwindo apo zvisingachinjike zvinotyorwa pakati pezviviri zvakapatsanurwa zvekiyi. Maonero anotsanangura invariant kuchengetedzwa, pane kungovharwa chete, zvikwata zvinobatsira zvikonzero zvine chekuita nekurongeka panguva yekuongorora kodhi.

Kuita kunogona kukushamisawo. Pane masisitimu anonetsana zvikuru ane vanyori vakawanda, std::shared_mutex inogona kutoita zvakaipa kupfuura plain std::mutex nekuda kwekuwedzera kwekutarisa mabhuku. Gara uine mbiri usati wafunga kuti muverengi-munyori kukiya kuhwina.

Std::shared_mutex Inofananidzwa sei nestd::mutex nemamwe maAlternatives?

std::mutex iri nyore, inokurumidza kuwana kana kukakavara kuri kwakadzikira, uye kwakakodzera kana kuverenga nekunyora kunoitika pachiyero chakaenzana. std::shared_mutex inopenya kana ichiverengwa yakawandisa kupfuura inonyorwa — a 10:1 kana yepamusoro reshiyo mutemo unonzwisisika usati wafunga nezve switch.

C++14 yakaunza std::shared_timed_mutex, iyo inowedzera try_lock_shared_for() ne try_lock_shared_until() yekuedza kwenguva. C++17's std::shared_mutex inodonhedza zvakasiyana-siyana zvenguva yekushandiswa kwakapfava. Kana uchida kuvharwa nenguva panzira yakagoverwa, std::shared_timed_mutex inoramba iripo uye marudzi ese ari maviri akakwana.

Kune dzimwe nzira dzisina kukiya, std::atomic yakasanganiswa nekungwarira kurongeka kwendangariro dzimwe nguva inogona kutsiva mutex zvachose kune mireza yakapfava kana makaunda, asi kune yakaoma data zvimiro, std::shared_mutex inoramba iri mhinduro inoverengeka uye inochengeteka muraibhurari yakajairika.

Mibvunzo Inowanzo bvunzwa

Ko std::shared_mutex inogona kukonzera nzara?

Hongu, zvinogona. Kana vabati vekiyi mitsva vachiramba vachiuya, munhu anokumbira kiyi chete anogona kumirira nekusingaperi — dambudziko rekare remunyori nenzara. Iyo C ++ yakajairwa haitendi yakanangana negwara, saka maitiro anoenderana nekuita. Mukuita, mashandisirwo mazhinji eraibhurari anoisa pamberi achimirira makiyi chete kana aiswa mumutsara, asi iwe unofanirwa kuona izvi kune yako chaiyo turusi cheni nepuratifomu kana nzara ichinetsa mukugadzira.

Ko std::shared_mutex yakachengeteka kushandisa ne std::condition_variable?

std::condition_variable inoda std::unique_lock, saka haienderani ne std::shared_mutex. Kana uchida kumirira pane chimwe chinhu iwe wakabata mutex wakagovana, shandisa std::condition_variable_any, inoshanda nemhando ipi neipi yeBasicLockable, kusanganisira std::shared_mutex yakabatanidzwa ne std::shared_lock.

Ndinofanira kuwedzera macomments here pese pandinoshandisa std::shared_mutex?

Pashoma, taura chiziviso chemutex kuti utsanangure kuti inodzivirira data ripi uye nekusasiyana kwainochengeta. Panzvimbo yega yega yekuvhara, chirevo chipfupi chinotsanangura kuti nei kugovaniswa kupesana nekuwana kwakasarudzika kwakasarudzwa kunowedzera kukosha kwakakosha kune vanoongorora makodhi uye vagadziri venguva yemberi. Concurrency tsikidzi dziri pakati pezvakanyanya kuoma kubereka nekugadzirisa, saka iyo investimendi mumashoko akajeka, echokwadi anobhadhara mibairo kakawanda.


Kugadzirisa masisitimu akaomarara - ingave yakabatana C++ kodhi kana bhizinesi rese mashandiro - inoda maturusi akakodzera uye chimiro chakajeka. Mewayzndiyo 207-module bhizinesi OS inovimbwa nevashandisi vanopfuura 138,000 kuunza kujeka kwakafanana pakushambadzira, CRM, e-commerce, analytics, nezvimwe, zvese mupuratifomu imwe kutanga pamadhora gumi nepfumbamwe chete pamwedzi. Rega kumhanyisa maturusi akawanda akabviswa uye tanga kumhanyisa bhizinesi rako nekurongeka kwesoftware yakagadzirwa zvakanaka. Edza Mewayz nhasi pa app.mewayz.com uone mashandurirwo anoita chikwata chako mashandire anoita chikwata chako.