Hacker News

Std:Shared_mutex faamuyali ka bɔ C++17 la

Kow fɔcogo

12 min read Via www.cppstories.com

Mewayz Team

Editorial Team

Hacker News

std::shared_mutex faamuyali ka bɔ C++17 la

std::shared_mutex, min donna C++17 kɔnɔ, o ye ɲɔgɔndan fɔlɔ ye min bɛ sira di jirisun caman ma u ka se ka ɲɔgɔn sɔrɔ (kalan) dakunw minɛ waati kelen na k’a sɔrɔ a bɛ se ka don dankan na sɛbɛnni baara kama A bɛ ɲɔgɔndan gɛlɛya minnu ka ca bi C++ kɔnɔ, olu dɔ ɲɛnabɔ, a kɛtɔ ka fɛɛrɛ saniyalen, sariyalen di baarakɛlaw ma walasa u ka se ka kalanden-sɛbɛnnikɛla datugucogo waleya k’a sɔrɔ u ma se mɔgɔ sabananw ka gafemarayɔrɔw ma walima API kɛrɛnkɛrɛnnenw na.

std::shared_mutex ye mun ye tigitigi ani mun na a farala C++17 kan ?

Sanni C++17 ka se, baarakɛlaw minnu mago tun bɛ kalanbaga-sɛbɛnnikɛla kɔrɔko la, olu tun ka kan k’u jigi da baarakɛminɛn kɛrɛnkɛrɛnnenw kan i n’a fɔ pthread_rwlock_t POSIX sitɛmuw kan walima SRWLOCK Windows kan, n’o tɛ u tun bɛna baara kɛ ni mɔgɔ sabananw ka gafemarayɔrɔw ye i n’a fɔ Boost. C++17 sariyasunba jɛkulu ye o danfara in dɔn, ka std::shared_mutex don kuncɛyɔrɔ la walasa k’a ɲɛnabɔ k’a ɲɛsin a ma.

hakilina jɔnjɔn ye tilennen ye : diɲɛ porogaramu caman kɔnɔ , kunnafonidilanw bɛ kalan ka caya kosɛbɛ ka tɛmɛ u sɛbɛnni kan . std::mutex sariyalen dɔ bɛ sɔrɔli bɛɛ kɛ seriyali ye — kalanw sen bɛ o la — min bɛ buteliw dabɔ minnu tɛ mako ɲɛ. std::shared_mutex bɛ o dantigɛli kɔrɔta ni danfara donli ye dakun fila ni ɲɔgɔn cɛ :

  • Jɛkulu (kalan) dakun — sɔrɔlen lock_shared() fɛ; jirisun caman bɛ se k’o minɛ waati kelen na, o b’a to a ka ɲi kalanni kɛli ɲɔgɔn fɛ.
  • dakun (sɛbɛnni) dakun — sɔrɔlen lock() fɛ; jiri kelen dɔrɔn de bɛ se k' o minɛ a waati kelen na , wa dakun jɛlen si tɛ sɔn k' a minɛ k' a sɔrɔ a bɛ minɛ .
  • std::shared_lock — RAII dakun min bɛ lock_shared() wele jɔli kan ani unlock_shared() tiɲɛni kan, ka nafolo bɔli bali.
  • std::unique_lock / std::lock_guard — baara bɛ kɛ ni danfara cogoya ye , k’a lajɛ ko sɛbɛnni baarakɛcogo lakananen don kosɛbɛ ani ko danfara tɛ.

Nin cogoya fila in bɛ std::shared_mutex kɛ fɛn ye min bɛ bɛn a yɛrɛ ma ko kɛlenw na i n’a fɔ cakɛdaw, labɛnni sɛbɛnw, ani kunnafonidilan suguya o suguya, kalanw bɛ baara caya yɔrɔ min na.

I bɛ baara kɛ ni std::shared_mutex ye cogo di kode lakika kɔnɔ ni kumasenw ye ?

kofɔli minnu bɛ kɛ kode kɔnɔ minnu bɛ baara kɛ ni std::shared_mutex ye, olu nafa ka bon kɛrɛnkɛrɛnnenya la bawo ɲɔgɔndɛmɛ hakilina tɔgɔ bɔra kosɛbɛ ko hakilijagabɔ ka gɛlɛn. Kuma minnu bilalen don koɲuman, olu bɛ mun na dakun suguya kɛrɛnkɛrɛnnen dɔ sugandira, o bɛ dɔ bɔ kosɛbɛ siniɲɛsigi ladonbagaw ka kunnafonidilanw bolicogo la balawu la. Nin ye misali ye min bɛ kɛ cogoya la:

#include 
#include 
#  don a kɔnɔ

kalasi ConfigRegistry { .
    fɛn caman bɛrɛbɛrɛ std::shared_mutex mtx_; // bɛ karti min bɛ duguma, o lakana
    std::karti_min ma sigi sen kan data_;

foroba : .
    // Kalan sira: jirisun caman bɛ se ka nin wele waati kelen na
    std::string get(const std::string& kilisi) sigicogo {
        std::shared_lock dakun (mtx_); // shared lock — lakanalen don kalanw kama minnu bɛ kɛ ɲɔgɔn fɛ
        auto it = data_.sɔrɔ (kɔlɔsili);
        segin a kan != data_.end() ? it->filanan : "";
    } .

    // Sɛbɛnni sira: don danma de wajibiyalen don
    void set(const std::string& key, const std::string& val) {
        std::unique_lock dakun (mtx_); // exclusive lock — bɛ kalanden bɛɛ bali
        data_[key] = val;
    } .
};
ye

A kɔlɔsi cogo min na kumasenw bɛ ŋaniya ɲɛfɔ min bɛ dakun sugandili kelen-kelen bɛɛ kɔfɛ sanni ka kode bɛ min kɛ, o fɔ kokura dɔrɔn. Nin ye sanu sariya ye : kuma fɔlenw ka kan ka jaabi mun na, a man kan ka mun jaabi. mutable daɲɛ koloma min bɛ mutex kan, o b’a to get() ka fɔ const k’a sɔrɔ a bɛ se ka datugu hali bi, o ye misali ye min bɛ kɛ tuma bɛɛ ani min bɛ kɛ ni kumasen ye.

ye

Key Insight : Aw bɛ baara kɛ ni RAII dakunw ye tuma bɛɛ (std::shared_lock, std::unique_lock) ni std::shared_mutex ye — aw kana lock() ani unlock() wele abada bolo la. Bololabaarakɛlaw ka dakunw dabɔli danfaralenw ɲɛkɔrɔ, o ye sira garanti ye min bɛ taa jɔli ni kɛwale ɲɛfɔbaliw la.

ye

Ni baara bɛ kɛ ni std::shared_mutex ye, o ye jaan jumɛnw ye ?

Hali ni kuma jɛlenw ni ŋaniya ɲumanw bɛ yen , std::shared_mutex bɛ ni jaan nɔgɔlenw ye minnu bɛ baarakɛla ŋanaw senna tiɲɛ . Farati min ka bon kosɛbɛ o ye lock upgrade ye : fɛɛrɛ jɔlen tɛ yen min bɛ se ka lock jɛlen dɔ sɛmɛntiya ka kɛ lock danma ye k’a sɔrɔ i ma a bila fɔlɔ. N’i y’a ɲini k’o kɛ k’a sɔrɔ i ma bɔ, o bɛ kɛ sababu ye ka jɔrɔnanko dɔ lawuli o yɔrɔnin bɛɛ la bawo jiribolo bɛ dakun jɛlen dɔ minɛ k’a sɔrɔ i bɛ dakun danmadɔ makɔnɔ min tɛ se ka di abada ni dakun jɛlen si bɛ yen — a bɛ min minɛ fana.

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

fili wɛrɛ min bɛ kɛ tuma caman na , o ye granularite jugu lakanani ye . Tuma dɔw la, daɲɛw dilannikɛlaw bɛ dakunw Dabɔ ka caya kojugu, ka kalanden-sɛbɛnni-sɛbɛnni misali kuntilenna Kὲlɛ, walima k’u Dɔgɔya kojugu, ka finɛtiriw To yen, fɛn minnu tɛ Yɛlɛma, olu bɛ Tiɲɛ dakunw sɔrɔli danfaralen fla ni ɲɔgɔn cɛ. Commentaires minnu bɛ invariant being protected ɲɛfɔ, sanni u ka kɛ variable dɔrɔn ye min bɛ datugu, olu bɛ ekipuw dɛmɛ u ka hakilinata di tiɲɛni kan kode lajɛ waati.

ɲɛnajɛ kɛcogo fana bɛ se ka aw kabakoya . Sitimɛ minnu bɛ sɔsɔ kosɛbɛ ni sɛbɛnnikɛla caman ye, std::shared_mutex bɛ se ka baara kɛ tiɲɛ na ka juguya ka tɛmɛ std::mutex gansan kan k’a sababu kɛ gafemara musaka wɛrɛw ye. Tuma bɛɛ profil sani i k’a miiri ko kalanden-sɛbɛnnikɛla ka da tuguli ye net win ye.

std::shared_mutex bɛ se ka suma ni std::mutex ni fɛɛrɛ wɛrɛw ye cogo di ?

std::mutex ka nɔgɔn, a sɔrɔli ka nɔgɔn ni sɔsɔli ka dɔgɔ, wa a bɛnnen don ni kalanw ni sɛbɛnniw bɛ kɛ ni hakɛ kelen ye. std::shared_mutex bɛ yeelen bɔ ni kalanw ka ca ni sɛbɛnniw hakɛ ye kosɛbɛ — 10:1 walima ka tɛmɛ o kan, o ye sariya bɛnnen ye ka sɔrɔ ka sɛgɛsɛgɛli kɛ sɛgɛsɛgɛli kan.

C++14 ye std::shared_timed_mutex don sen kan , o min bɛ try_lock_shared_for() ani try_lock_shared_until() fara a kan waati latigɛlenw kama. C++17 ka std::shared_mutex bɛ waatibolodacogo caman fili walasa ka waleyali nɔgɔlen sɔrɔ. N’i mago bɛ waati bolodacogo la sira jɛlen kan, std::shared_timed_mutex bɛ to ka sɔrɔ ani suguya fila bɛɛ bɛ sariya dafalen na.

Ka ɲɛsin fɛn wɛrɛw ma minnu tɛ datugu, std::atomic ni hakilijagabɔ sigicogo ɲuman faralen ɲɔgɔn kan, o bɛ se ka mutex bɛɛ bila tuma dɔw la darapo nɔgɔmanw walima jatebɔlanw nɔ na, nka kunnafonidilan gɛlɛnw kama, std::shared_mutex bɛ to fura ye min bɛ kalan kosɛbɛ ani min bɛ se ka mara kosɛbɛ gafemarayɔrɔ jɔnjɔn kɔnɔ.

Ɲininkali minnu bɛ kɛ tuma caman na

yala std::shared_mutex bɛ se ka kɔngɔ bila mɔgɔ la wa ?

Ɔwɔ, a bɛ se. Ni shared-lock tigi kura tora ka na tuma bɛɛ, exclusive-lock ɲininikɛla bɛ se ka kɔnɔni kɛ fo waati dafalen — klasiki sɛbɛnnikɛla kɔngɔ gɛlɛya. C++ sariya tɛ tilennenya politiki kɛrɛnkɛrɛnnen dɔ wajibiya, o la, kɛwalew bɛ bɔ waleyali de la. Tiɲɛ na, gafemarayɔrɔ sariyalen waleyali fanba bɛ fɔlɔfɔlɔ dakun danmadɔw makɔnɔni na ni u bilala layini na, nka i ka kan k’o sɛgɛsɛgɛ i ka baarakɛminɛn kɛrɛnkɛrɛnnenw ni i ka platformu kama ni kɔngɔ ye haminanko ye sɛnɛko la.

Yala std::shared_mutex lakananen don ka baara kɛ ni std::condition_variable ye wa?

std::condition_variablestd::unique_lock de wajibiya, o la a tɛ bɛn std::shared_mutex ma. N’i mago bɛ ka makɔnɔni kɛ cogoya dɔ la k’a sɔrɔ i bɛ mutex jɛlen dɔ minɛ, baara kɛ ni std::condition_variable_any ye, min bɛ baara kɛ ni BasicLockable suguya bɛɛ ye, o la, std::shared_mutex min faralen don ɲɔgɔn kan ni std::shared_lock.

ye

Yala n ka kan ka kuma fɔlenw fara a kan tuma o tuma n' n bɛ baara kɛ ni std::shared_mutex ye wa ?

A dɔgɔyalenba la, mutex ka fɔta fɔ walasa k’a ɲɛfɔ a bɛ kunnafoni minnu lakana ani a bɛ fɛn minnu mara. Kɔlɔsili yɔrɔ kelen-kelen bɛɛ la, kuma surun min b’a ɲɛfɔ mun na donni jɛlen ni don danma sugandira, o bɛ nafa caman fara kode lajɛbagaw ni siniɲɛsigi ladonbagaw kan. Concurrency bugs bɛ fɛnw cɛma minnu lasegincogo n’u labɛnni ka gɛlɛn, o la, wari bilali kuma jɛlenw ni tigitigiw la, o bɛ nafa sara siɲɛ caman.


Sitimɛ gɛlɛnw ɲɛnabɔli — a kɛra C++ kode ye min bɛ kɛ ɲɔgɔn fɛ wo, a kɛra jago baarakɛcogo bɛɛ ye wo — o bɛ baarakɛminɛn ɲumanw ni sigicogo jɛlen de wajibiya. Mewayz ye jagokɛla ka OS ye min bɛ se ka kɛ modulu 207 ye, baarakɛla 138.000 ni kɔ dalen bɛ min na walasa k’o jɛya kelen in lase feereli, CRM, ɛntɛrinɛti jago, jateminɛw, ani fɛn wɛrɛw ma, o bɛɛ bɛ kɛ kɛnɛ kelen kan k’a daminɛ dɔrɔmɛ 19 dɔrɔn na kalo o kalo. Baarakɛminɛn tan ni caman minnu ni ɲɔgɔn cɛ tigɛlen don, olu jɔli dabila ani k’a daminɛ k’i ka jago ɲɛminɛ ni porogaramuw ye minnu dilannen don koɲuman. A' ye Mewayz lajɛ bi app.mewayz.com kan k' a lajɛ cogo min na sigida kelen bɛ aw ka jɛkulu ka baara kɛcogo sɛmɛntiya .

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