Hacker News

Pannakaawat ti Std:Shared_mutex manipud iti C++17

Dagiti Komento

9 min read Via www.cppstories.com

Mewayz Team

Editorial Team

Hacker News

Panaawatan ti std::shared_mutex manipud iti C++17

Ti

std::shared_mutex, a naiyam-ammo iti C++17, ket maysa a primitibo ti panagsinkronisar a mangipalubos kadagiti adu a thread nga aggigiddan a mangtengngel kadagiti naibingbingay (mabasa) a kandado bayat a masigurado ti eksklusibo a panagserrek para kadagiti panagpataray ti panagsurat. Daytoy ket mangrisut ti maysa kadagiti kadawyan a karit ti panaggigiddan iti moderno a C++ babaen ti panangted kadagiti agparparang-ay ti nadalus, pagalagadan a wagas a mangipatungpal ti panagkandado ti agbasbasa-mannurat a saan a makadanon kadagiti maikatlo a partido a biblioteka wenno dagiti plataporma-a naisangsangayan nga API.

Ania nga Eksakto ti std::shared_mutex ken Apay a Nainayon Daytoy iti C++17?

Sakbay ti C++17, dagiti agparparang-ay a kasapulan ti semantika ti agbasbasa-mannurat ket masapul nga agpannuray kadagiti naisangayan a solusion ti plataporma a kas ti pthread_rwlock_t kadagiti sistema ti POSIX wenno SRWLOCK iti Windows, wenno agusarda kadagiti maikatlo a partido a biblioteka a kas ti Boost. Ti komite ti pagalagadan ti C++17 ket nabigbigna daytoy a giwang ken nangiyam-ammo ti std::shared_mutex iti ulo ti tapno direkta a maiturong daytoy.

Ti kangrunaan nga ideya ket diretso: kadagiti adu a programa ti pudno a lubong, ti datos ket adayo a masansan a mabasa ngem ti naisurat. Ti maysa a pagalagadan a std::mutex ket mangisererisar kadagiti amin a panagserrek — dagiti panagbasa ket nairaman — a mangpartuat kadagiti saan a kasapulan a tengnged ti botelia. Ti std::shared_mutex ket mangitag-ay iti dayta a restriksion babaen ti panangilasin ti dua a wagas ti panagkandado:

  • Nabingbingay (basaen) a kandado — nagun-od babaen ti lock_shared(); dagiti adu a thread ket mabalinda a tenglen daytoy nga aggigiddan, a mangaramid daytoy a nasayaat para kadagiti aggigiddan a panagbasa.
  • Eksklusibo (isurat) a kandado — nagun-od babaen ti lock(); maysa laeng a sinulid ti mabalin a mangtengngel iti daytoy iti maysa a gundaway, ken awan dagiti nabingbingay a kandado a maipalubos bayat a daytoy ket natengngel.
  • std::shared_lock — ti maysa a balkot ti RAII a mangawag ti lock_shared() iti panagbangon ken unlock_shared() iti pannakadadael, a manglapped kadagiti panagruar ti rekurso.
  • std::unique_lock / std::lock_guard — maus-usar a kadua ti eksklusibo a wagas, a mangsigurado a dagiti panagpataray ti panagsurat ket naan-anay a nasalakniban ken natalged iti pannakailaksid.

Daytoy a doble-modo a disenio ket mangaramid ti std::shared_mutex a natural a maibagay para kadagiti senario a kas dagiti cache, dagiti rehistro ti panagisaad, ken ania man nga estruktura ti datos a dagiti panagbasa ket mangituray ti karga ti trabaho.

Kasano nga Usaren ti std::shared_mutex iti Pudno a Kodigo nga Addaan kadagiti Komento?

Dagiti komento iti kodigo nga agus-usar ti std::shared_mutex ket nangruna a napateg gapu ta ti lohika ti panaggigiddan ket agdindinamag a narigat a rason. Dagiti nasayaat ti pannakaisaadna a komento ket manglawlawag apay ti partikular a kita ti kandado ket napili, a daytoy ket dakkel a mangkissay ti peggad dagiti masakbayan a mangmantener a di aksidente a mangiyam-ammo kadagiti karera ti datos. Adda ditoy ti gagangay a padron:

#iraman ti 
#iraman ti 
#iraman ti 

klase ConfigRehistro { .
    agbaliwbaliw nga std::nabingbingay_mutex mtx_; // salaknibanna ti mapa iti baba
    std::di naurnos_a_mapa datos_;

publiko:
    // Dalan ti basaen: dagiti adu a thread ket mabalin nga awagan daytoy nga aggigiddan
    std::kuerdas makaala (const std::kuerdas& tulbek) const {
        std::nabingbingay_a_kandado a kandado (mtx_); // shared lock — natalged para kadagiti aggigiddan a panagbasa
        auto dayta = datos_.biroken ( tulbek);
        isubli dayta != data_.end () ? it->maikadua : "";
    } .

    // Dalan ti panagsurat: eksklusibo a panagserrek ti kasapulan
    void set (const std::kuerdas& tulbek, const std::kuerdas& val) {
        std::naisangsangayan_a_kandado a kandado (mtx_); // eksklusibo a kandado — manglapped kadagiti amin nga agbasbasa
        datos_[ tulbek] = val;
    } .
};

Paliiwem no kasano nga ilawlawag dagiti komento ti panggep iti likudan ti tunggal maysa a panagpili ti kandado imbes a basta ibaga manen no ania ti ar-aramiden ti kodigo. Daytoy ti balitok a pagalagadan: dagiti komento ket rumbeng a sumungbat iti apay, saan a ania. Ti mutable a nasken a balikas iti mutex ket mangipalubos ti get() a maideklara a const bayat a makabael pay laeng a mangikandado, ti gagangay ken idiomatiko a padron.

Pakaammo ti Tulbek: Kanayon nga agusar kadagiti balkot ti kandado ti RAII (std::shared_lock, std::unique_lock) nga addaan iti std::shared_mutex — saan a pulos nga awagan ti lock() ken unlock() a manual. Ti manual a panagkandado iti kaadda dagiti eksepsion ket maysa a garantisado a dalan kadagiti deadlock ken saan a naikeddeng a kababalin.

Ania Dagiti Gagangay a Silo No Agtrabaho iti std::shared_mutex?

Uray addaan kadagiti nalawag a komento ken nasayaat a panggep, ti std::shared_mutex ket addaan kadagiti di madmadlaw a silo a mangtrip kadagiti aduan kapadasan a developer. Ti kapeggadan ket ti panag-upgrade ti kandado: awan ti naibangon a wagas a mangpasayaat ti naibingbingay a kandado iti eksklusibo a kandado a saan nga umuna a mairuar. Ti panagpadas nga aramiden daytoy a saan a mangiruar ket mangpartuat ti dagus a deadlock gapu ta ti thread ket agtengtengngel ti naibingbingay a kandado bayat ti panagur-uray ti eksklusibo a kandado a pulos a saan a maited no la ketdi adda ti ania man a naibingbingay a kandado — a mairaman ti maysa nga iggemna.

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

Ti sabali pay a gagangay a biddut ket ti panangsalaknib iti di umiso a granularity. Dagiti agparparang-ay ket sagpaminsan a nalawa unay ti panagkandado, a mangparmek ti panggep ti padron ti agbasbasa-mannurat, wenno akikid unay, a mangibati kadagiti tawa a dagiti inbariante ket nalabsing iti nagbaetan ti dua a nagsisina a panaggun-od ti kandado. Dagiti komento a mangiladawan ti invariant a masalakniban, imbes a ti laeng variable a naikandado, ket makatulong kadagiti grupo nga agrason maipapan ti kinaumiso bayat ti panagrepaso ti kodigo.

Mabalin met a sorpresaennaka ti performance. Kadagiti nangato a nasuppiatan a sistema nga addaan kadagiti adu a mannurat, ti std::shared_mutex ket mabalin nga aktual a nakarkaro ti panagaramidna ngem ti maysa a plain a std::mutex gapu ti kanayonan a panagtengngel ti libro. Kanayon nga ag-profile sakbay nga ipapan a ti panagkandado ti agbasbasa-mannurat ket maysa a net win.

Kasano a Maidilig ti std::shared_mutex iti std::mutex ken Dagiti Dadduma nga Alternatibo?

Ti

std::mutex ket nasimsimple, naparpartak a magun-od no ti panagsusuppiat ket nababa, ken maitutop no dagiti panagbasa ken panagsurat ket mapasamak iti agarup a kapada a kasansan. Ti std::shared_mutex ket agsilnag no dagiti panagbasa ket nangruna nga ad-adu ngem dagiti panagsurat — ti 10:1 wenno nangatngato a ratio ket maysa a nainkalintegan a pagalagadan ti abaga sakbay nga ikonsiderar ti panagbalbaliw.

Ti

Ti C++14 ket nangiyam-ammo ti std::shared_timed_mutex, a manginayon ti try_lock_shared_for() ken try_lock_shared_until() para kadagiti na-time a panagpadas. Ti std::shared_mutex ti C++17 ket mangibaba kadagiti na-time a variant para iti naluklukmeg a pannakaipatungpal. No kasapulam ti na-time a panagkandado iti naibingbingay a dalan, ti std::shared_timed_mutex ket agtalinaed a magun-od ken agpada a dagiti kita ket naan-anay a pagalagadan.

|

Dagiti Masansan a Saludsod

Mabalin kadi a ti std::shared_mutex ket mangpataud ti bisin?

Wen, mabalin. No dagiti baro a shared-lock holders ket agtultuloy a sumangpet nga agtultuloy, ti maysa nga eksklusibo-a-kandado nga agkidkiddaw ket mabalin nga aguray iti di nakedngan — maysa a klasiko a writer starvation a parikut. Ti pagalagadan ti C++ ket saan a mangibilin ti espesipiko a patakaran ti kinapatas, isu a ti kababalin ket agpannuray iti pannakaipatungpal. Iti praktis, kaaduan kadagiti pagalagadan a pannakaipatungpal ti biblioteka ket ipangpangrunada dagiti agur-uray nga eksklusibo a kandado apaman a dagitoy ket napila, ngem rumbeng a paneknekam daytoy para iti espesipiko a toolchain ken platapormam no ti bisin ket maysa a pakaseknan iti produksion.

Natalged kadi ti std::shared_mutex nga usaren iti std::condition_variable?

Ti

std::condition_variable ket agkasapulan ti std::unique_lock, isu a saan a direkta a maitunos iti std::shared_mutex. No kasapulam ti aguray iti kondision bayat ti panangiggemmo iti naibingbingay a mutex, usarem ti std::condition_variable_any, nga agtrabaho iti ania man a kita ti BasicLockable, a mairaman ti std::shared_mutex a naiparis iti std::shared_lock.

Rumbeng kadi nga inayonko dagiti komento tunggal usarek ti std::shared_mutex?

Iti kabassitan, komento ti deklarasion ti mutex tapno mangiladawan no ania a datos ti salaknibanna ken dagiti inbariante a mantenerenna. Iti tunggal maysa a lugar ti kandado, ti ababa a komento a mangilawlawag no apay a napili ti naibingbingay kontra ti eksklusibo a panagserrek ket mangnayon ti naipangpangruna a pateg para kadagiti mangrepaso ti kodigo ken dagiti masakbayan a mangmantener. Dagiti concurrency bug ket karaman kadagiti karirigatan a mapaadu ken matarimaan, isu a ti panagpuonan kadagiti nalawag, eksakto a komento ket agbayad kadagiti dibision iti adu a daras.


Ti panangtarawidwid kadagiti komplikado a sistema — aggigiddan man a kodigo ti C++ wenno ti sibubukel nga operasion ti negosio — ket agkasapulan kadagiti umno nga alikamen ken nalawag nga estruktura. Ti Mewayz ket isu ti 207-module business OS a pagtaltalkan ti nasurok a 138,000 nga agus-usar a mangyeg iti dayta met laeng a kinalawag iti marketing, CRM, e-commerce, analytics, ken dadduma pay, amin iti maysa a plataporma a mangrugi laeng iti $19 iti kada bulan. Isardengmo ti ag-juggle iti pinulpullo a nadiskonekta nga alikamen ket rugiam nga ipatarayen ti negosiom babaen ti kinaeksakto ti nasayaat ti pannakadiseniona a software. Padasem ti Mewayz ita nga aldaw iti app.mewayz.com ken kitaem no kasano a ti nagkaykaysa a sistema ket mangbalbaliw iti wagas ti panagtrabaho ti grupom.

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