Std:Shared_mutex nteaseɛ a ɛfiri C++17
Nsɛm a wɔka
Mewayz Team
Editorial Team
Std::shared_mutex nteaseɛ a ɛfiri C++17
std::shared_mutex, a wɔde aba C++17 mu no yɛ synchronization primitive a ɛma threads pii tumi kura shared (read) locks bere koro mu bere a ɛhwɛ ma wonya kwan soronko ma akyerɛw dwumadi ahorow. Ɛdi concurrency nsɛnnennen a ɛtaa ba wɔ nnɛyi C++ mu no mu baako ho dwuma denam ɔkwan a ɛho tew, a ɛyɛ gyinapɛn a ɛma developers a wɔfa so de akenkanfoɔ-ɔkyerɛwfoɔ locking di dwuma a wɔrenkɔ nwomakorabea a ɛtɔ so mmiɛnsa anaa platform-specific APIs.
Dɛn Pɛpɛɛpɛ ne std::shared_mutex ne Dɛn Nti na Wɔde Kaa Ho Wɔ C++17 mu?
Ansa na C++17 reba no, na ɛsɛ sɛ developers a wohia akenkanfoɔ-ɔkyerɛwfoɔ semantics de wɔn ho to platform-specific solutions te sɛ pthread_rwlock_t wɔ POSIX systems anaa SRWLOCK wɔ Windows so, anyɛ saa a wɔde third-party libraries te sɛ Boost bedi dwuma. C++17 gyinapɛn boayikuo no hunuu saa nsonsonoeɛ yi na wɔde std::shared_mutex baa ti no mu de dii ho dwuma tẽẽ.
Adwene titiriw no yɛ tẽẽ: wɔ wiase ankasa nhyehyɛe pii mu no, wɔkenkan data mpɛn pii sen sɛnea wɔkyerɛw. Gyinapɛn std::mutex serializes access nyinaa — akenkan ka ho — a ɛde bottlenecks a ɛho nhia ba. std::shared_mutex ma saa anohyeto no so denam nsonsonoe a ɛda akwan abien a wɔfa so to mu ntam:
- Wɔakyekyɛ (kenkan) lock — wɔanya denam
lock_shared()so; nhama pii betumi akura eyi bere koro mu, na ɛma ɛyɛ nea eye ma akenkan a ɛkɔ so bere koro mu. - Ɛyɛ (kyerɛw) lock — wɔnya denam
lock()so; asaawa biako pɛ na ebetumi akura eyi bere koro mu, na wɔmma kwan mma wɔmfa nkɔnsɔnkɔnsɔn a wɔkyɛ bere a wɔakura mu no. - std::shared_lock — RAII wrapper a ɛfrɛ
lock_shared()wɔ adansi mu neunlock_shared()wɔ ɔsɛeɛ mu, siw nneɛma a ɛretu. - std::unique_lock / std::lock_guard — wɔde di dwuma ne mode a ɛyɛ soronko no, hwɛ sɛ wɔabɔ akyerɛw dwumadie ho ban koraa na ɛyɛ exception-safe.
Saa dual-mode nhyehyeɛ yi ma std::shared_mutex yɛ abɔdeɛ a ɛfata ma nsɛm te sɛ caches, nhyehyeɛ registries, ne data nhyehyeɛ biara a akenkan di adwuma no so.
Wobɛyɛ dɛn de std::shared_mutex Di Dwuma wɔ Real Code a Nsɛm Wɔka Mu?
Nsɛm a wɔka wɔ koodu a ɛde std::shared_mutex di dwuma no som bo titiriw efisɛ concurrency logic agye dimmɔne sɛ ɛyɛ den sɛ wobesusuw ho. Nsɛm a wɔde asi hɔ yiye no ma nea enti wɔpaw lock type pɔtee bi mu da hɔ, a ɛtew asiane a ɛwɔ hɔ sɛ daakye ahwɛfo de data mmirikatu ahorow bɛba wɔ akwanhyia mu no so kɛse. Nhwɛsoɔ a wɔtaa yɛ nie:
#fa ka ho
#fa ka ho
#fa ka ho
adesuakuw ConfigRegistry { .
std a ɛsakra::wɔkyɛ_mutex mtx_; // bɔ map a ɛwɔ aseɛ ha no ho ban
std::map_a wɔanhyehyɛ no data_;
ɔmanfoɔ:
// Kenkan kwan: nhama pii betumi afrɛ eyi bere koro mu
std::ahama nya (const std::ahama& safoa) const {
std::wɔkyɛ_apon ano (mtx_); // shared lock — ahobammɔ ma akenkan a ɛkɔ so bere koro mu
auto no = data_.hwehwɛ (safoa);
san kɔ no != data_.end () ? it->nea ɛto so abien : "";
} .
// Twerɛ kwan: exclusive access a wɔhwehwɛ
void set (const std:: ahama & safoa, const std:: ahama & val) {
std:: soronko_lock lock (mtx_); // exclusive lock — siw akenkanfo nyinaa kwan
data_ [safoa] = val;
} .
}; na ɛyɛ adwuma
Hwɛ sɛnea nsɛm no kyerɛkyerɛ adwene a ɛwɔ lock paw biara akyi sen sɛ wobɛsan aka nea koodu no yɛ kɛkɛ. Eyi ne sika kɔkɔɔ gyinapɛn: ɛsɛ sɛ nsɛm a wɔka no bua dɛn ntia, na ɛnyɛ dɛn. mutable asɛmfua titiriw a ɛwɔ mutex no so no ma kwan ma wɔpae mu ka get() sɛ const bere a ɛda so ara tumi to mu, nhwɛso a wɔtaa yɛ na ɛyɛ kasakoa.
a wɔde ahyɛ muna ɛkyerɛ sɛ woayɛKey Insight: Fa RAII lock wrappers (
std::shared_lock,std::unique_lock) di dwuma bere nyinaa nestd::shared_mutex— mfrɛlock()neunlock()da. Nsaano a wɔde to mu wɔ baabi a nneɛma a wɔayi afi mu wɔ hɔ no yɛ ɔkwan a wɔahyɛ ho bɔ sɛ ɛkɔ deadlocks ne suban a wɔankyerɛkyerɛ mu.
Afiri bɛn na ɛtaa ba bere a wo ne std::shared_mutex reyɛ adwuma?
Sɛ wowɔ nsɛm a emu da hɔ na adwempa mpo a, std::shared_mutex wɔ afiri a ɛnyɛ anifere a ɛbɔ nnwumayɛfo a wɔn ho akokwaw. Nea ɛyɛ hu sen biara ne lock upgrade: ɔkwan biara nni hɔ a wɔasisi a wobɛfa so ama lock a wɔakyekyɛ no akɔ lock a ɛyɛ soronko a wonnyi no adi kan. Sɛ wobɔ mmɔden sɛ wobɛyɛ saa a worennyae a, ɛde ɔhaw ba ntɛm ara efisɛ asaawa no kura lock a wɔakyekyɛ bere a ɛretwɛn lock a ɛyɛ soronko a wontumi mma da bere tenten a lock biara a wɔakyɛ wɔ hɔ — a nea ɛkura no ka ho.
💡 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 →Mfomso foforo a wɔtaa di ne sɛ wɔbɛbɔ granularity a ɛnteɛ no ho ban. Ɛtɔ da bi a, developers lock trɛw dodo, di atirimpɔw a ɛwɔ akenkanfo-ɔkyerɛwfo nhwɛso no so nkonim, anaasɛ teateaa dodo, gyaw windows a wɔabu invariants so wɔ lock acquisitions abien a ɛsono emu biara ntam. Nsɛm a ɛkyerɛkyerɛ invariant a wɔrebɔ ho ban, sen sɛ wɔbɛto variable no mu kɛkɛ no boa akuw ma wosusuw nea ɛteɛ ho bere a wɔrehwɛ mmara no mu.
Adwumayɛ nso betumi ama wo ho adwiriw wo. Wɔ nhyehyɛe ahorow a wɔpere wɔn ho kɛse a akyerɛwfo pii wom so no, std::shared_mutex betumi ayɛ adwuma bɔne ankasa asen std::mutex a ɛnyɛ den esiane nhomakorabea ho ka foforo nti. Bere nyinaa profile ansa na woafa no sɛ akenkanfo-ɔkyerɛwfo locking yɛ net nkonimdi.
Ɛbɛyɛ dɛn na std::shared_mutex Toto std::mutex ne Nneɛma Afoforo a Wɔde Si Ase Ho?
std::mutex yɛ mmerɛw, ɛyɛ ntɛm sɛ wobenya bere a akyinnyegye sua, na ɛfata bere a akenkan ne akyerɛw kɔ so wɔ mpɛn dodow a ɛbɛyɛ pɛ mu. std::shared_mutex hyerɛn bere a akenkan dodow boro akyerɛw so kɛse — 10:1 anaa nea ɛboro saa ratio yɛ mmara a ntease wom ansa na woasusuw nsakrae no ho.
C++14 de std::shared_timed_mutex bae, a ɛde try_lock_shared_for() ne try_lock_shared_until() ka ho ma mmɔdenbɔ a wɔde bere ahyɛ mu. C++17 std::shared_mutex no tow bere mu nsakrae ahorow no gu ma ɛyɛ leaner implementation. Sɛ wo hia bere a wɔde toto mu wɔ ɔkwan a wɔakyekyɛ no so a, std::shared_timed_mutex da so ara wɔ hɔ na ahorow abien no nyinaa yɛ gyinapɛn a edi mũ.
Wɔ akwan foforo a lock-free ho no, std::atomic a wɔde ahwɛyiye a wɔde hyehyɛ memory no aka ho no, ɛtɔ mmere bi a ebetumi asi mutex ananmu koraa ama frankaa anaa akontaabu a ɛnyɛ den, nanso wɔ data nhyehyɛe a ɛyɛ den ho no, std::shared_mutex da so ara yɛ ano aduru a wotumi kenkan na wotumi hwɛ so sen biara wɔ nhomakorabea a ɛwɔ gyinapɛn no mu.
Nsɛmmisa a Wɔtaa Bisa
So std::shared_mutex betumi ama ɔkɔm aba?
Yiw, ebetumi aba. Sɛ shared-lock holders foforo kɔ so ba bere nyinaa a, exclusive-lock requester bi betumi atwɛn daa — ɔkyerɛwfo ɔkɔm haw a ɛyɛ tete de. C++ gyinapɛn no nhyɛ sɛ wɔnyɛ nhyehyɛe pɔtee bi a ɛfa atɛntrenee ho, enti suban gyina sɛnea wɔde bedi dwuma no so. Wɔ nnwuma mu no, nwomakorabea dwumadie dodoɔ no ara a wɔde di dwuma a ɛyɛ gyinapɛn no de apontoɔ soronko a wɔretwɛn no di kan bere a wɔatoto ntonto no, nanso ɛsɛ sɛ wohwɛ yei mu ma wo adwinnadeɛ ne platform pɔtee no sɛ ɔkɔm yɛ ade a ɛhaw adwene wɔ adwumayɛ mu a.
So std::shared_mutex yɛ ahobammɔ sɛ wode bedi dwuma ne std::condition_variable?
std::condition_variable hwehwɛ std::unique_lock, enti ɛne std::shared_mutex nhyia tẽẽ. Sɛ ɛho hia sɛ wotwɛn wɔ tebea bi mu bere a wokura mutex a wɔakyekyɛ mu a, fa std::condition_variable_any di dwuma, a ɛne BasicLockable su biara yɛ adwuma, a std::shared_mutex a wɔde abɔ mu ne std::shared_lock.
So ɛsɛ sɛ mede nsɛm ka ho bere biara a mede std::shared_mutex bedi dwuma?
Anyɛ yiye koraa no, ka mutex no mpaemuka no ho asɛm de kyerɛkyerɛ data a ɛbɔ ho ban ne invariants a ɛhwɛ so. Wɔ lock site biara so no, nsɛm tiawa bi a ɛkyerɛkyerɛ nea enti a wɔpaw kyɛfa a wɔde ma ne nea wɔde ma nkutoo no de mfaso kɛse ka ho ma wɔn a wɔhwɛ mmara no mu ne wɔn a wɔbɛhwɛ so daakye. Concurrency bugs ka nea ɛyɛ den sɛ wɔbɛsan ayɛ na wɔasiesie no ho, enti sika a wɔde hyɛ nsɛm a emu da hɔ na ɛyɛ pɛpɛɛpɛ mu no tua mfaso mpɛn pii.
Nhyehyɛe a ɛyɛ den a wɔbɛhwɛ so — sɛ́ ɛyɛ C++ koodu a ɛkɔ so bere koro mu anaasɛ adwumayɛ dwumadi nyinaa — hwehwɛ sɛ wonya nnwinnade a ɛfata ne nhyehyɛe a emu da hɔ. Mewayz yɛ 207-module adwumayɛ OS a nnipa bɛboro 138,000 gye di sɛ ɛde saa pefeeyɛ koro no ara bɛba aguadi, CRM, e-commerce, nhwehwɛmu, ne nea ɛkeka ho, ne nyinaa wɔ platform biako so a efi ase fi $19 pɛ ɔsram biara. Gyae sɛ wode nnwinnade du du pii a wɔatwa mu no di dwuma na fi ase fa softwea a wɔayɛ no yiye di w’adwuma no pɛpɛɛpɛ. Sɔ Mewayz hwɛ nnɛ wɔ app.mewayz.com na hwɛ sɛnea nhyehyɛe a wɔaka abom sesa ɔkwan a wo kuw no fa so yɛ adwuma.
Try Mewayz Free
All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.
Get more articles like this
Weekly business tips and product updates. Free forever.
You're subscribed!
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 →Related articles
Hacker News
Eniac, the First General-Purpose Digital Computer, Turns 80
Mar 19, 2026
Hacker News
What 81,000 people want from AI
Mar 19, 2026
Hacker News
Conway's Game of Life, in real life
Mar 19, 2026
Hacker News
Mozilla to launch free built-in VPN in upcoming Firefox 149
Mar 19, 2026
Hacker News
We Have Learned Nothing
Mar 19, 2026
Hacker News
A sufficiently detailed spec is code
Mar 19, 2026
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