Hacker News

Std:Shared_mutex ukax C++17 ukan amuyt’atawa

Amuyunaka

9 min read Via www.cppstories.com

Mewayz Team

Editorial Team

Hacker News

C++17

ukan std::shared_mutex ukar amuyaña | Jichha pacha C++ ukan mä jach’a jan walt’äw concurrencia ukar askichi, lurayirinakarux mä q’uma, estándar ukham uñt’ayasa, ullart’ir-qillqir bloqueo ukar phuqhañataki, jan kimsïr bibliotecanakar jan ukax plataforma-específica API ukar purisa.

Kunas chiqpachan std::shared_mutex ukat kunats C++17 ukan yapxatatäpacha?

C++17 nayraqata, lurayirinakax semántica ullart’iri-qillqir munapki ukanakax plataforma-específica solucionanakaruw atinisipxañapäna, kunjamatix pthread_rwlock_t sistemas POSIX ukan jan ukax SRWLOCK Windows ukan, jan ukax kimsïr bibliotecas ukanakamp apnaqapxañapawa, Boost ukham. comité estándar C++17 ukax uka ch’amanchaw uñt’awayi ukatx std::shared_mutex ukx p’iqinchaw uñt’ayawayi, chiqak askichañataki.

Jach’a amuyux chiqapawa: walja chiqpach wakichäwinakanx datos ukax qillqt’atanakat sipanx juk’amp uñakipatawa. Mä estándar std::mutex ukax taqi mantañ serializa — ullart’awinakax uñt’ayatawa — ukax jan wakiskir cuellos de botellanak uñstayi. std::shared_mutex uka jark’awix pä jist’antañ thakhinak mayjt’ayasaw apthapi:

  • Compartido (liyt’aña) bloqueolock_shared() tuqi katuqata; walja hilos ukanakax mä pachanw ukax katxaruspa, ukax mä pachan uñakipañatakix wali askiwa.
  • Jan sapa (qillqañ) bloqueolock() tuqi katuqata; mä hilo ukakiw ukax mä kutix katxaruspa, ukatx janiw kuna bloqueos compartidos ukax katjatäkipanx jaysatäkiti.
  • std::shared_lock — mä RAII wrapper ukax lock_shared() ukaruw jawsi lurañanxa ukatx unlock_shared() ukaruw jawsi t’unjañataki, ukax recursos fugas ukanakar jark’aqañataki.
  • std::unique_lock / std::lock_guard — ukax sapa mayni modalidad ukampiw apnaqasi, qillqañ lurawinakax taqpach jark’aqatäñapataki ukhamarak excepción-safe ukhamañapataki.
sasaw sapxi

Aka pä modalidad ukan lurawipax std::shared_mutex ukarux mä natural ajuste ukham tukuyi escenarios ukanakatakix kunjamakitix cachés, registros de configuración ukat kuna estructura de datos ukanakas kawkhantix ullart’awinakax irnaqäw carga ukar apnaqapxi.

Kunjamsa std::shared_mutex ukax Chiqpach Código ukanx Comentarios ukamp apnaqañaxa?

Codigo ukan amuyunakapax std::shared_mutex apnaqi, ukax wali askiwa kunatix lógica de concurrencia ukax wali uñt’atawa ch’ama amuyt’añataki. Suma uñt’at arsuwinakax qhanancht’iwa kunatsa mä particular bloqueo tipo ajllitäna, ukax wali jisk’achatawa jutïr mantenidores ukanakan jan amuyt’asis datos t’ijuñanak uñt’ayañataki. Akax mä típico uñacht’äwiwa:

#ukax  ukampiw uñt’ayasi
#include 
#ukax  ukan uñt'ayatawa

clase ConfigRegistro ukax { .
    mayjt’ir std::compartido_mutex mtx_; // ukax aka amparamp lurat mapa ukar jark’aqasi
    std::jan ordenat_mapa datos_;

jaqinakaru:
    // Uñakipaña thakhi: walja threads ukax mä pachan jawsapxaspa
    std::string get(const std::string& llave) ukax mä juk’a pachanakanwa.
        std::compartido_bloqueo bloqueo (mtx_); // shared lock — ukax mä pachan uñakipañatakiw jan kuna jan walt’awis utjkiti
        auto it = datos_.jikxataña (llave);
        ukatsti != data_.end() ? it->payïri : "";
    }

    // Qillqañ thakhi: exclusivo acceso ukax wakisiwa
    void set(const std::cadena& llave, const std::cadena& val) { Ukax mä jach’a uñacht’äwiwa.
        std::mä sapa_bloqueo bloqueo (mtx_); // exclusivo bloqueo — taqi ullart’irinakaruw jark’aqi
        datos_[llave] = val ukat juk’ampinaka;
    }
};
ukax mä juk’a pachanakanwa

Kunjamsa amuyunakax sapa bloqueo ajlliw qhipäxan amtäwip qhanañchapxi uk uñjañäni, janiw kuntix código ukax luraski uk wasitat arsuñakikiti. Akax quri kamachiwa: amuyt’awinakax kunatsa sasaw jaysañapa, janiw kunas ukar jaysañapäkiti. Mutex ukan mutable uka aruxa get() ukarux const ukham uñt’ayañapatakiw jayti, ukampirus wali ch’amanchatawa, mä patrón común ukat idiomático.

ukax mä juk’a pachanakanwa

Jach’a uñakipaña: Sapa kutiw RAII bloqueo envolturas (std::shared_lock, std::unique_lock) apnaqañama std::shared_mutex — janipuniw lock() ukat unlock() ukanak amparamp jawsañakiti. Excepciones ukan utjkipanx manual bloqueo ukax mä garantizado thakhiwa deadlocks ukat jan uñt’at sarnaqawinakataki.

ukat juk’ampinaka

¿Kuna jan walt’awinakas utji std::shared_mutex ukamp irnaqañataki?

Qhana arsuwinakampi ukhamarak suma amtanakampis, std::shared_mutex ukax sutil sipitanakaniwa, ukax yatxatat lurayirinakarux t’unjatawa. Juk’amp jan walt’awix bloqueo machaqar tukuyaña: janiw mä bloqueo compartido ukar mä exclusivo bloqueo ukar machaqar tukuyañax utjkiti jan nayraqat antutasa. Ukham lurañ yant’añax jan antutasax mä ratuk ch’amanchaw uñstayi kunatix hilo ukax mä bloqueo compartido ukaruw katxasi, kunawsatix bloqueo exclusivo ukax suyt’aski ukax janipuniw churatäkaspati kunapachatix kuna bloqueo compartido ukax utjki ukhakama — ukampirus ukax katxarutawa.

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

Yaqha pantjasiwix jan wali granularidad ukar jark’aqañawa. Desarrolladores ukanakax awisax sinti jach’a llawintat lurapxi, ullart’ir-qillqir patrón ukan amtapar atipt’asa, jan ukax sinti jisk’a, ventanas ukar jaytañataki kawkhantix invariantes ukanakax pä sapaqat bloqueo adquisiciones ukanakan p’akintata. invariante jark’aqatäski ukar uñt’ayir amuyunaka, jan ukax variable ukar jist’antat uñt’ayañat sipansa, equiponakarux chiqapar uñjañ tuqit amuyt’añ yanapt’i, código uñakipañ pachanxa.

Performance ukax muspharayarakispawa. Walja qillqirinakamp wali ch’axwañ sistemanakanxa, std::shared_mutex chiqpachanx mä sanu std::mutex ukar sipanx juk’amp jan waliw luraspa, kunatix libronak imañ qullqix yapxatatawa. Sapa kutiw perfil ukax janïr ullart’ir-qillqir bloqueo ukax mä neto atipawiw sasin amuyañkama.

Kunjamsa std::shared_mutex ukax std::mutex ukat Yaqha Alternativas ukanakamp chikancht’asi?

std::mutex ukax juk’amp sapurukiwa, juk’amp jank’akiw kunapachatix ch’axwawix jisk’akiwa, ukatx askiwa kunapachatix ullart’awinakas qillqañas niya pachpa frecuencian utjki ukhaxa. std::shared_mutex qhant’i kunapachatix ullart’awinakax wali jach’a jakhüwimp qillqt’atanakat sipanx — mä 10:1 jan ukax juk’amp ratio ukax mä amuyt’ir kamachiwa janïr mayjt’äw amuyt’kasa.

C++14 ukax std::shared_timed_mutex uñt’ayi, ukax try_lock_shared_for() ukat try_lock_shared_until() ukanak yapxati, pacha yant’awinakataki. C++17 ukax std::shared_mutex ukax mä leaner implementación ukatakix pacha mayjt’awinak jaqukipi. Jaqichasiña thakhin pacha jist’antañax wakisispa ukhaxa, std::shared_timed_mutex ukax utjaskakiwa ukatx panpacha kastax taqpach uñt’atawa.

Jan bloqueo ukan mayjt’awinakatakix, std::atomic ukax wali amuyump amuyu ordenamiento ukamp chikt’atax yaqhip pachax mä mutex taqpach lantintaspawa sapuru banderanakataki jan ukax jakhüwinakataki, ukampis complejos estructuras de datos ukatakix std::shared_mutex ukax biblioteca estándar ukanx juk’amp ullart’añjam ukat uñjañjam solución ukhamaw qhiparaski.

Sapa kuti jiskt’awinaka

std::shared_mutex ukax manq’at awtjataruw puriyaspa?

Jïsa, ukhamäspawa. Machaq compartido-bloqueo ukankirinakax sapa kuti purinipxaspa ukhax mä exclusivo-bloqueo mayirix wiñayatakiw suyt’aspa — mä clásico qillqir manq’at awtjata jan walt’awi. C++ norma ukax janiw mä política específica de justicia ukar kamachikiti, ukhamax sarnaqawix phuqhañat dependeriwa. Chiqansa, jilpach biblioteca estándar ukan implementaciones ukanakax cerraduras exclusivas pendientes ukanakaruw nayrar sartayapxi, mä kuti fila ukankapki ukhaxa, ukampis ukax cadena de herramientas específicas ukat plataforma ukanakatakix chiqanchañamawa, manq’at pist’añax producción ukan mä llakiw utjchi ukhaxa.

std::shared_mutex ukax std::condition_variable ukamp apnaqañatakix walikiti?

std::condition_variable ukax mä std::unique_lock ukaruw munaraki, ukhamax janiw chiqak std::shared_mutex ukampi chikachaskiti. Mä condición ukar suyt’añax wakisispa ukhax mä mutex compartido ukar katxaruñatakix, std::condition_variable_any apnaqañaw wakisi, ukax kuna BasicLockable kastamp irnaqaski, ukampirus std::shared_mutex ukax mä std::shared_lock.

ukamp chikt’atawa

Sapa kuti std::shared_mutex apnaqañax aruskipäwinak yapxatañajati?

Jichhax, mutex ukan declaración ukar amuyt’añamawa, kuna datos ukanakas jark’aqaski ukat invariantes ukanakas uñji uk qhanañchañataki. Sapa bloqueo ukanx mä jisk’a aruskipäwix kunats compartido versus exclusivo acceso ukaw ajllitäna uk qhanañcht’añax código uñakipirinakatakix ukat jutïr mantenimiento ukanakatakix wali askiwa. Concurrencia ukan jan walt’awinakapax juk’amp ch’amaw uñstayañataki ukhamarak askichañataki, ukhamax qhana, chiqap arsuwinakar qullqichrantañax walja kutiw dividendonak paylla.


ukat juk’ampinaka

Sistemas complejos apnaqaña — código C++ concurrente jan ukax taqpach operación empresarial — chiqap herramientas ukat qhana estructura ukanak mayi. Mewayz ukax 207 módulos de negocios OS ukawa, ukax 138.000 jila apnaqirinakan atinisitawa, uka pachpa qhananchawinak qhathur, CRM, comercio electrónico, análisis ukat juk’ampinakar apaniñataki, taqi ukax mä plataforman 19 dólares phaxsit qalltasi. Tunka tunka desconectadas herramientas ukanakamp malabarismo lurañ jaytxañamawa ukat negocios ukar software suma wakicht’at precisión ukamp apnaqañ qalltañamawa. Jichhürunakanx Mewayz ukar yant’apxam app.mewayz.com ukat uñjapxam kunjams mä mayacht’at sistemax kunjams equipoman irnaqapxi uk mayjt’ayi.

paylla

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