Malamalama Std:Shared_mutex mai C++17
Fa'amatalaga
Mewayz Team
Editorial Team
Malamalama std::shared_mutex mai C++17
std::shared_mutex, fa'alauiloa ile C++17, ose fa'aupuga fa'amuamua e fa'ataga ai le tele o filo e taofi fa'atasi (faitau) loka a'o fa'amautinoa le avanoa fa'apitoa mo galuega tusitusi. E fo'ia ai se tasi o lu'itau masani fa'atasi i le C++ fa'aonaponei e ala i le tu'uina atu i tagata atia'e se auala mama, fa'ata'atia e fa'atino ai le lokaina o le aufaitau-tusitala e aunoa ma le o'o atu i faletusi a isi vaega po'o API fa'apitoa.
O le a tonu le std::shared_mutex ma Aisea na Fa'aopoopoina ai ile C++17?
A'o le'i o'o i le C++17, na fa'alagolago le au atia'e o lo'o mana'omia le faitau-tusitala semantics i fa'amatalaga fa'apitoa e pei o pthread_rwlock_t i luga o faiga POSIX po'o SRWLOCK i luga o Windows, pe latou te fa'aogaina faletusi vaega lona tolu e pei o le Boost. Na iloa e le komiti fa'ata'atia C++17 lea va ma fa'ailoa mai std::shared_mutex i le ulutala e fa'asa'o ai.
O le manatu autu e tuusaʻo: i le tele o polokalama moni, o faʻamaumauga e faitau faʻatele nai lo le tusiaina. O le std::mutex e fa'asalalauina avanoa uma - faitau fa'atasi - lea e fa'atupu ai ni fa'amaufa'ailoga e le mana'omia. std::shared_mutex si'itia lena tapula'a e ala i le fa'ailogaina o auala loka e lua:
- Loka fa'asoa (faitau) — maua mai
lock_shared(); e tele filo e mafai ona taofiofia lenei mea i le taimi e tasi, e fetaui lelei mo faitauga fa'atasi. - Loka fa'apitoa (tusia) — maua mai
loka(); e na'o le tasi le filo e mafai ona taofia lenei mea i le taimi, ma e leai ni loka fa'asoa e fa'atagaina a'o taofia. - std::shared_lock — o se afifi RAII e fa'aigoaina
lock_shared()i le fausiaina ma leunlock_shared()i le fa'aleagaina, e puipuia ai le tafe mai o punaoa. - std::unique_lock / std::lock_guard — fa'aaoga i le faiga fa'apitoa, fa'amautinoaina o lo'o puipuia atoatoa le fa'agaioiga tusitusi ma fa'asaogalemu.
O lenei mamanu e lua-mode ua fa'apenaina ai std::shared_mutex se fa'ata'ita'iga fa'apitoa e pei o fa'amaumauga, fa'amaumauga o fa'amaumauga, ma so'o se fausaga fa'amaumauga e fa'atonu ai e faitau le mamafa o galuega.
E fa'afefea ona e fa'aogaina std::shared_mutex i le Real Code ma Fa'amatalaga?
O fa'amatalaga ile fa'ailoga e fa'aoga std::shared_mutex e taua tele ona e matua faigata lava ona fefulisa'i le manatu fa'atasi. Fa'amatalaga tu'u lelei e fa'amanino aipe aiseana filifilia ai se ituaiga loka fa'apitoa, lea e matua fa'aitiitia ai le lamatiaga o tagata tausi i le lumana'i e fa'ailoa fa'afuase'i fa'amaumauga. O se mamanu masani lenei:
#include
#include
#aofia < manoa>
vasega ConfigRegistry {
mutable std::shared_mutex mtx_; // puipuia le faafanua i lalo
std::unordered_map data_;
lautele:
// Faitau le ala: tele filo e mafai ona valaʻau faʻatasi
std:: manoa maua(const std:: manoa& ki) const {
std:: loka_fa'asoa (mtx_); // loka fa'asoa - saogalemu mo faitauga fa'atasi
auto it = data_.find(key);
toe faafoi mai != data_.end() ? it->lua : "";
}
// Tusi le ala: e manaʻomia le avanoa faʻapitoa
seti gaogao(const std:: manoa& ki, const std:: manoa& val) {
std:: loka_ loka tulaga ese(mtx_); // loka fa'apitoa - poloka uma le au faitau
data_[ki] = val;
}
};
Matau pe fa'apefea ona fa'amatala e fa'amatalaga le fa'amoemoe i tua o filifiliga loka ta'itasi nai lo le na'o le toe ta'ua o mea e fai e le code. O le tulaga auro lea: o fa'amatalaga e tatau ona tali aisea, ae le o le o le a. O le upu mutable i luga o le mutex e mafai ai e get() ona fa'ailoa const ae o lo'o mafai lava ona loka, o se fa'ata'ita'iga masani ma fa'amatalaga.
Malamalamaaga Autu: Fa'aaoga i taimi uma pusa loka RAII (
std::shared_lock,std::unique_lock) fa'atasi ai mastd::shared_mutex— aua ne'i vala'au ma lelock()maunlock(). O le lokaina o le tusilima a'o iai ni tuusaunoaga o se auala mautinoa lea e oo atu ai i faaletonu ma amioga e le'i fa'amalamalamaina.
O a fa'alavelave masani pe a galue ma std::shared_mutex?
E o'o lava i fa'amatalaga manino ma fa'amoemoega lelei, std::shared_mutex e iai mailei ma'ale'ale e fa'ate'a ai le au atina'e poto. O le mea e sili ona mataʻutia o lefaʻaleleia loka: e leai se auala faʻapipiʻi e faʻaleleia ai se loka faʻasoa i se loka faʻapitoa e aunoa ma le tatalaina muamua. O le taumafai e fai e aunoa ma le fa'amatu'u e tupu ai se fa'alavelave fa'afuase'i ona o lo'o i ai i le filo se loka fa'asoa a'o fa'atali mo le loka fa'apitoa e le mafai ona tu'uina atu pe a iai se loka fa'asoa - e aofia ai ma le loka o lo'o uuina.
💡 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 →O le isi mea sese masani o le puipuia lea o le fa'aupuga sese. O nisi taimi e lokaina e le au atiaʻe le lautele, faʻatoʻilaloina le faʻamoemoega o le faitau-tusitala mamanu, pe vaapiapi tele, tuʻu ai faʻamalama e solia ai le va o ni loka eseese se lua. O fa'amatalaga o lo'o fa'amatala ai le fetu'uaiga o lo'o puipuia, nai lo le na'o le fesuia'i o lo'o loka, e fesoasoani ai i 'au e fa'atatau i le sa'o a'o toe iloilo tulafono.
O fa'atinoga e mafai fo'i ona faate'ia oe. I luga o faiga fa'atauva'a ma le tele o tusitala, std::shared_mutex atonu e sili atu le leaga nai lo le std::mutex ona o le fa'aopoopoina o le tausiga o tusi. Fa'ailoa i taimi uma a'o le'i fa'apea o lo'o loka le au faitau-tusitala ose manumalo.
E Fa'afefea le std::shared_mutex Fa'atusatusa i le std::mutex ma isi Su'i?
std::mutex e sili atu ona faigofie, vave ona maua pe a maualalo fefinauaiga, ma talafeagai pe a faitau ma tusitusi i se tulaga tutusa taimi. std::shared_mutex e susulu pe a sili atu le faitau nai lo le numera o tusitusiga - o le 10:1 po'o le maualuga maualuga o se tulafono fa'atatau a'o le'i iloiloina le ki.
C++14 fa'afeiloa'i std::shared_timed_mutex, e fa'aopoopo try_lock_shared_for() ma try_lock_shared_until() mo taumafaiga fa'atulagaina. O le std::shared_mutex a C++17 e fa'aitiitia ai le fa'atulagaina o taimi mo se fa'atinoga sili atu. Afai e te mana'omia le lokaina o le taimi i le ala fa'asoa, std::shared_timed_mutex o lo'o avanoa pea ma o ituaiga uma e lua e fa'ata'atia atoatoa.
Mo isi mea e leai se loka, std::atomic tu'ufa'atasia ma le fa'atonuga fa'aeteete e manatua e mafai i nisi taimi ona suia atoa le mutex mo fu'a faigofie po'o fa'atau, ae mo fa'asologa o fa'amaumauga lavelave, std::shared_mutex o lo'o tumau pea le vaifofo e sili ona mafai ona faitau ma tausia i totonu o le faletusi masani.
Fesili e Fai soo
E mafai e std::shared_mutex ona mafua ai le matelaina?
Ioe, e mafai. Afai o lo'o fa'aauau pea ona taunu'u mai tagata loka fa'asoa, e mafai ona fa'atali se tagata talosaga fa'apitoa - o se fa'afitauli masani faitala fia'aifa'afitauli. Ole tulaga ole C++ e le fa'atonuina se faiga fa'atatau tonu, o lea e fa'alagolago le amio ile fa'atinoga. I le fa'ata'ita'iga, o le tele o fa'atinoga masani o faletusi e fa'amuamua le fa'atali loka fa'apitoa pe'ā tu'uina atu, ae e tatau ona e fa'amaonia lenei mea mo lau filifili mea faigaluega ma le fa'avae pe a fai o le fia'ai o se popolega ile gaosiga.
E saogalemu le std::shared_mutex e fa'aoga i le std::condition_variable?
std::condition_variable e mana'omia se std::unique_lock, e le fetaui lelei ma std::shared_mutex. Afai e te manaʻomia le faʻatali i se aiaiga aʻo e uuina se mutex fefaʻasoaaʻi, faʻaaoga std::condition_variable_any, lea e aoga i soʻo se ituaiga BasicLockable, e aofia ai std::shared_mutex faʻapipiʻi ma le std::shared_lock.
E tatau ona ou fa'aopoopo fa'amatalaga i taimi uma ou te fa'aogaina ai le std::shared_mutex?
Fa'asilisili, fa'amatala le ta'utinoga a le mutex e fa'amatala ai fa'amaumauga na te puipuia ma fa'aletonu o lo'o tausia. I nofoaga loka ta'itasi, o se fa'amatalaga pu'upu'u e fa'amatala ai le mafua'aga na filifilia ai le fefa'asoaa'i ma le avanoa fa'apitoa e fa'aopoopoina ai le taua tele mo tagata su'esu'e tulafono ma tagata tausia i le lumana'i. O mea fa'akomepiuta o se tasi lea o mea e sili ona faigata ona toe gaosia ma fa'aleleia, o lea o le fa'afaigaluegaina i fa'amatalaga manino ma sa'o e totogi fa'afia taimi.
Puleaina faiga lavelave - pe tutusa le C++ code po'o se pisinisi atoa - e mana'omia ai meafaigaluega sa'o ma manino fausaga. Mewayzo le 207-module pisinisi OS faʻatuatuaina e le sili atu i le 138,000 tagata faʻaoga e aumaia lena lava manino i le maketiina, CRM, e-commerce, analytics, ma isi mea, uma i le tasi tulaga e amata ile $19 i le masina. Taofi le faʻatauvaʻa o le tele o mea faigaluega motumotu ma amata faʻatautaia lau pisinisi i le saʻo o polokalama faʻapipiʻi lelei. Fa'ata'ita'i le Mewayz i aso nei ile app.mewayz.com ma va'ai pe fa'afefea ona suia e se faiga tu'ufa'atasi le auala e galue ai lau 'au.
We use cookies to improve your experience and analyze site traffic. Cookie Policy