Fahatakarana ny Std: Shared_mutex avy amin'ny C++ 17
Comments
Mewayz Team
Editorial Team
Ny fahazoana std::shared_mutex avy amin'ny C++17
std::shared_mutex, nampidirina tao amin'ny C++17, dia rindrankajy fandrindrana izay ahafahan'ny kofehy maromaro mitazona hidin-trano iombonana (vakiana) miaraka sady miantoka ny fidirana manokana amin'ny asa fanoratana. Izy io dia mamaha ny iray amin'ireo fanamby iraisana mahazatra indrindra amin'ny C ++ maoderina amin'ny fanomezana ny mpamorona fomba madio sy manara-penitra amin'ny fampiharana ny fanidiana mpamaky-mpanoratra nefa tsy mahatratra ny tranomboky an'ny antoko fahatelo na API manokana amin'ny sehatra.
Inona marina no atao hoe std::shared_mutex ary nahoana no nampiana tao amin'ny C++17?
Talohan'ny C++17, mila niantehitra tamin'ny vahaolana manokana amin'ny sehatra toy ny pthread_rwlock_t amin'ny rafitra POSIX na SRWLOCK amin'ny Windows ny mpamorona mila semantika mpanoratra mpanoratra, na mampiasa tranomboky an'ny antoko fahatelo toa ny Boost. Ny komity manara-penitra C++17 dia nahafantatra an'io elanelana io ary nampiditra std::shared_mutex tao amin'ny lohapejy mba hamahana azy mivantana.
Ny hevitra fototra dia mahitsy: amin'ny fandaharana maro amin'izao tontolo izao, ny angona dia vakiana matetika kokoa noho ny voasoratra. Ny std::mutex manara-penitra dia mametaka ny fidirana rehetra — tafiditra ao anatin'izany ny vakiana — izay miteraka fanerena tsy ilaina. std::shared_mutex dia manala io famerana io amin'ny fanavahana ny fomba fanidiana roa:
- Hidy nozaraina (vakiana) — azo tamin'ny
lock_shared(); kofehy maromaro dia afaka mitazona izany miaraka, ka mahatonga azy io ho tsara ho an'ny famakiana miaraka. - Hidin-trano manokana (manoratra) — azo amin'ny alalan'ny
hidy(); kofehy iray ihany no afaka mitazona an'io amin'ny fotoana iray, ary tsy misy hidin-trano ifampizarana azo atao raha mihazona izany. - std::shared_lock — fonosana RAII izay miantso
lock_shared()amin'ny fanamboarana syunlock_shared()amin'ny fandringanana, hisorohana ny fiparitahan'ny loharanon-karena. - std::unique_lock / std::lock_guard — ampiasaina miaraka amin'ny fomba manokana, miantoka fa voaaro tanteraka ny asa fanoratana ary tsy misy fiarovana.
Ity endrika roa-mode ity dia mahatonga ny std::shared_mutex ho mety tsara amin'ny toe-javatra toy ny cache, rejistra fanefena, ary izay rafitra angon-drakitra izay mibahan-toerana eo amin'ny enta-mavesatra ny vakiteny.
Ahoana ny fampiasanao ny std::shared_mutex amin'ny Real Code miaraka amin'ny fanehoan-kevitra?
Ny fanehoan-kevitra ao amin'ny kaody mampiasa std::shared_mutex dia tena sarobidy satria ny lojikan'ny concurrency dia malaza ho sarotra eritreretina. Ny fanehoan-kevitra napetraka tsara dia manazava nahoana no nofidina karazana hidin-trano iray manokana, izay mampihena be ny mety hisian'ny mpitahiry ho avy hampiditra tsy nahy hazakazaka angon-drakitra. Ity misy lamina mahazatra:
#include
#include
#ampidiro
class ConfigRegistry {
mutable std::shared_mutex mtx_; // miaro ny sarintany etsy ambany
std::unordered_map data_;
ampahibemaso:
// Famakiana lalana: kofehy maromaro dia mety hiantso an'io miaraka
std::string get(const std::string&key) const {
std::shared_lock hidy(mtx_); // hidin-trano iombonana — azo antoka ho an'ny famakiana miaraka
auto it = data_.find(key);
avereno != data_.end() ? it->faharoa : "";
}
// Soraty ny lalana: ilaina ny fidirana manokana
void set(const std::string& key, const std::string& val) {
std :: hidy_hidy tokana (mtx_); // hidy manokana — manakana ny mpamaky rehetra
data_[key] = val;
}
};
Jereo ny fomba hanazavan'ny fanehoan-kevitra ny tanjona ao ambadiky ny safidy hidin-trano fa tsy mamerina fotsiny izay ataon'ilay kaody. Ity no fenitry ny volamena: ny fanehoan-kevitra dia tokony hamaly nahoana, fa tsy inona. Ny teny fanalahidy motable ao amin'ny mutex dia mamela ny get() hambara const nefa mbola afaka manidy, lamina mahazatra sy idiomatic.
Fanazavana fototra: Mampiasà famonosana hidin-trano RAII foana (
std::shared_lock,std::unique_lock) miaraka amin'nystd::shared_mutex— aza miantso mihitsylock()syunlock()manual. Ny fanidiana amin'ny tanana amin'ny fisian'ny maningana dia lalana azo antoka mankany amin'ny fahatapahan-jiro sy fihetsika tsy voafaritra.
Inona no fandrika mahazatra rehefa miasa amin'ny std::shared_mutex?
Na dia misy fanehoan-kevitra mazava sy finiavana tsara aza, std::shared_mutex dia manana fandrika manjavozavo izay mahasarika ny mpamorona efa za-draharaha. Ny tena mampidi-doza dia ny fanavaozana hidin-trano: tsy misy fomba namboarina hanavaozana ny hidin-trano iombonana ho hidy manokana nefa tsy avoaka aloha. Miteraka fiatoana eo noho eo ny fiezahana manao izany nefa tsy mamoaka izany satria ny kofehy dia mitazona hidy ifampizarana eo am-piandrasana ny hidin-trano manokana izay tsy azo omena na oviana na oviana raha mbola misy ny hidin-trano iombonana — anisan'izany ilay tazony.
💡 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 →Ny lesoka mahazatra iray hafa dia ny fiarovana ny granularity diso. Indraindray ny mpamorona dia manidy malalaka loatra, mandresy ny tanjon'ny mpamaky-mpanoratra, na tery loatra, mamela varavarankely izay misy ny tsy fitoviana eo amin'ny fividianana hidin-trano roa samihafa. Ny fanehoan-kevitra izay mamaritra ny tsy miova dia arovana, fa tsy ny fari-piadidiana fotsiny no mihidy, dia manampy ny ekipa hieritreritra momba ny fahamarinana mandritra ny famerenana ny kaody.
Mety hahagaga anao koa ny fampisehoana. Amin'ny rafitra miady mafy miaraka amin'ny mpanoratra maro, std::shared_mutex dia mety ho ratsy kokoa noho ny std::mutex tsotra noho ny vola fanampiny fitahirizana boky. Ny mombamomba anao foana alohan'ny hiheverana fa ny fanidiana ny mpamaky-mpanoratra dia fandresena.
Ahoana ny fampitahana ny std::shared_mutex amin'ny std::mutex sy ny hafa?
std::mutex dia tsotra kokoa, haingana kokoa azo rehefa ambany ny fifandirana, ary mety rehefa mitovitovy matetika ny famakiana sy fanoratana. std::shared_mutex dia mamiratra rehefa mamaky be noho ny isan'ny manoratra — ny tahan'ny 10:1 na ambony dia fitsipika azo ampiharina alohan'ny handinihana ny fifandimbiasana.
C++14 dia nampiditra std::shared_timed_mutex, izay manampy try_lock_shared_for() sy try_lock_shared_until() ho an'ny andrana ara-potoana. Ny std::shared_mutex an'ny C++17 dia manary ny variana ara-potoana ho fampiharana mora kokoa. Raha mila fanidiana ara-potoana eo amin'ny lalana ifampizarana ianao dia mbola misy std::shared_timed_mutex ary samy manara-penitra tanteraka ireo karazany roa ireo.
Ho an'ny safidy tsy misy hidin-trano, std::atomic miaraka amin'ny filaharan'ny fitadidiana amim-pitandremana indraindray dia afaka manolo tanteraka ny mutex ho an'ny saina na kaontera tsotra, fa ho an'ny rafitra angon-drakitra sarotra, std::shared_mutex dia mijanona ho vahaolana mora vakiana sy azo karakaraina ao amin'ny tranomboky mahazatra.
Fanontaniana matetika
Afaka miteraka mosary ve ny std::shared_mutex?
Eny, mety izany. Raha tsy mitsahatra ny fahatongavan'ireo mpihazona hidin-trano iombonana, dia mety hiandry tsy misy fetra ny mpangataka hidin-trano iray — olana moanana mpanoratra mahazatra. Ny fenitra C ++ dia tsy mandidy politikam-pahamarinana manokana, noho izany dia miankina amin'ny fampiharana ny fitondran-tena. Amin'ny fampiharana, ny ankamaroan'ny fampiharana tranomboky manara-penitra dia manao laharam-pahamehana ny hidin-trano mihantona rehefa milahatra izy ireo, saingy tokony hanamarina izany ianao amin'ny rojom-pitaovanao manokana sy ny sehatra raha toa ka mampanahy ny famokarana ny hanoanana.
Azo antoka ve ny std::shared_mutex ampiasaina amin'ny std::condition_variable?
std::condition_variable dia mila std::unique_lock, ka tsy mifanaraka mivantana amin'ny std::shared_mutex. Raha mila miandry fepetra ianao raha mitazona mutex zaraina dia ampiasao std::condition_variable_any, izay miasa amin'ny karazana BasicLockable rehetra, anisan'izany ny std::shared_mutex ampiarahina amin'ny std::shared_lock.
Tokony hanampy fanehoan-kevitra isaky ny mampiasa std::shared_mutex ve aho?
Farafahakeliny, maneho hevitra ny fanambaran'ny mutex mba hamaritana hoe inona ny angona arovany sy ny invariants tazoniny. Ao amin'ny tranokala hidin-trano tsirairay, misy fanehoan-kevitra fohy manazava ny antony nifidianana ny fidirana mizara mifanohitra amin'ny fidirana manokana dia manampy lanja lehibe ho an'ny mpandinika ny kaody sy ny mpitahiry ho avy. Anisan'ny sarotra amboarina sy amboarina ny bug concurrency, ka ny fampiasam-bola amin'ny fanehoan-kevitra mazava sy mazava dia mitondra tombony imbetsaka.
Ny fitantanana rafitra saro-takarina — na kaody C++ miaraka na asa fandraharahana iray manontolo — dia mitaky fitaovana tsara sy rafitra mazava. Mewayz dia OS orinasa 207-module atokisan'ny mpampiasa mihoatra ny 138,000 mba hitondra izany mazava mitovy amin'ny varotra, CRM, e-varotra, analyse, sy ny maro hafa, ao anaty sehatra iray manomboka amin'ny $19 isam-bolana. Atsaharo ny fanaovana juggling amin'ireo fitaovana tapaka am-polony ary atombohy ny fampandehanana ny orinasanao miaraka amin'ny fahitsiana amin'ny rindrambaiko voarafitra tsara. Andramo ny Mewayz anio ao amin'ny app.mewayz.com ary jereo ny fomba fiovan'ny rafitra iray mitambatra ny fomba fiasan'ny ekipanao.
We use cookies to improve your experience and analyze site traffic. Cookie Policy