Te mohio ki te Std:Shared_mutex mai i C++17
Nga korero
Mewayz Team
Editorial Team
E mohio ana ki te std::shared_mutex mai i C++17
std::shared_mutex, i whakaurua i roto i te C++17, he tukutahi taketake e taea ai nga miro maha ki te pupuri i nga raka tiritahi (panui) i te wa e whakarite ana te uru motuhake mo nga mahi tuhi. Ka whakatauhia e ia tetahi o nga wero whakakotahitanga noa i roto i te C++ hou ma te hoatu ki nga kaiwhakawhanake he huarahi ma, paerewa hei whakatinana i te maukati kaipanui-kaituhi me te kore e toro atu ki nga whare pukapuka-tuatoru, ki nga API motuhake-tuara.
He aha te std::shared_mutex me te aha i taapirihia ki C++17?
I mua i te C++17, me whirinaki nga kaiwhakawhanake e hiahia ana ki nga kupu tuhi-kaituhi-kaituhi ki nga otinga motuhake mo te papaapapa penei i pthread_rwlock_t i runga i nga punaha POSIX, i SRWLOCK ranei i runga i Windows, ka whakamahia ranei e ratou nga whare pukapuka tuatoru penei i te Boost. I mohiohia e te komiti paerewa C++17 tenei waahi me te whakauru std::shared_mutex ki te pane hei whakatika tika.
He maamaa te whakaaro matua: i roto i te maha o nga hotaka o te ao, he nui ake te panui o nga raraunga i te tuhi. Ko te paerewa std::mutex ka whakarangaranga i nga urunga katoa — ka uru mai nga panui — ka puta mai he kohungahunga koretake. std::shared_mutex ka hiki i taua here ma te wehewehe i waenga i nga aratau maukati e rua:
- Kati tiritiri (panui) — i riro ma
lock_shared(); ka taea e nga miro maha te pupuri i tenei wa kotahi, he pai mo nga panui kotahi. - rakau motuhake (tuhi) — i riro mā
raka(); kotahi anake te miro ka mau i tenei wa, karekau he raka tiri e whakaaetia i te wa e mau ana. - std::shared_lock — he takai RAII e karanga ana
lock_shared()mo te hanga meunlock_shared()mo te whakangaromanga, e kore e pakaru rauemi. - std::unique_lock / std::lock_guard — whakamahia me te aratau motuhake, me te whakarite kei te tino parea nga mahi tuhi me te kore-haumaru.
Na tenei hoahoa aratau-rua ka hanga std::shared_mutex he mea tika mo nga ahuatanga penei i nga keteroki, nga rehita whirihoranga, me nga hanganga raraunga kei te noho nga panui ki runga i nga mahi.
Me pehea e Whakamahi ai koe i te std::shared_mutex i roto i te Waehere Tuturu Me Nga Korero?
Ko nga korero i roto i te waehere e whakamahi ana std::shared_mutex he mea tino nui na te mea he tino uaua ki te whakaaro mo te arorau whakakotahi. Ko nga korero kua whakatakoto pai he whakamarama he aha i whiriwhiria ai tetahi momo raka, e tino whakaiti ana i te tupono o nga kaiwhakatikatika a muri ake nei ki te whakauru i nga reihi raraunga. Anei he tauira angamaheni:
#include
#include
class ConfigRegistry {
mutable std::shared_mutex mtx_; // ka tiakina te mapi i raro nei
std::unordered_mapdata_;
tūmatanui:
// Panui te ara: ka karanga tahi nga miro maha
std::string get(const std::string&key) const {
std:: maukati_maukati(mtx_); // raka tiritiri — haumaru mo nga panui kotahi
auto it = data_.find(key);
whakahokia mai != data_.end() ? it->tuarua : "";
}
// Tuhia te ara: me uru motuhake
huinga kore(const std::string& key, const std::string&val) {
std:: maukati_maukati(mtx_); // raka motuhake — ka aukati i nga kaipānui katoa
raraunga_[matua] = val;
}
};
Kia mahara me pehea te whakamarama o nga korero i te kaupapa kei muri i ia whiringa raka, kaua ki te whakahoki ano i nga mahi a te waehere. Ko te paerewa koura tenei: me whakautu nga korero he aha, kaua he he aha. Ko te kupu matua mutable i runga i te mutex ka taea e get() te kii const i te wa e taea tonu ana te maukati, he tauira noa, he ahua kii.
Maramatanga Matua: Whakamahia tonutia nga takai maukati RAII (
std::shared_lock,std::unique_lock) mestd::shared_mutex— kaua rawa e waea atu ki alock()meunlock()ā-ringa. Ko te maukati a-ringa i te aroaro o nga okotahi he ara whakapumau ki nga kati me te whanonga kore taupatupatu.
He aha nga raru noa ina mahi me std::shared_mutex?
Ahakoa he marama nga korero me nga whakaaro pai, kei a std::shared_mutex nga mahanga ngawari e raru ai nga kaihanga mohio. Ko te mea tino kino ko whakahou raka: karekau he huarahi hanga-i roto hei whakapai ake i te raka tiritahi ki te raka motuhake me te kore e tuku i te tuatahi. Ko te ngana ki te mahi pera me te kore e tuku ka puta he kati tonu na te mea kei te pupuri te miro i tetahi raka tiri i te wa e tatari ana mo te raka motuhake e kore e taea te tuku i te wa e mau ana tetahi raka tiri — tae atu ki tera e mau ana.
💡 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 →Ko tetahi atu pohehe noa ko te parenga i te he o te kirikiri. I etahi wa ka raka whanui rawa nga Kaihanga, ka hinga te kaupapa o te tauira kaipanui-kaituhi, he whaiti rawa ranei, ka waiho nga matapihi e takahia ana nga rerekee i waenga i nga hoko raka motuhake e rua. Ko nga korero e whakaahua ana i te he rerekee kei te parea, kaua ko te taurangi e maukati ana, ka awhina nga roopu ki te whakaaro tika i te wa e arotake ana i te waehere.
Ka taea hoki e te mahi te miharo. I runga i nga punaha tohetohe me te maha o nga kaituhi, std::shared_mutex ka kaha ake pea te mahi kino atu i te std::mutex na te nui o te utu kaute. I nga wa katoa ka whai tohu i mua i te whakaaro ko te maukati kaipanui-kaituhi he toa.
Me pehea te std::shared_mutex ki te std::mutex me etahi atu rereke?
std::mutex he ngawari ake, he tere ake te whiwhi i te wa e iti ana te tautohetohe, me te tika ki te panui me te tuhi i te rite tonu te auau. std::shared_mutex ka whiti ina panui nui atu i te maha o nga tuhi — he 10:1 teitei ake ranei te owehenga he ture tika o te koromatua i mua i te whakaaro ki te whakawhiti.
C++14 i whakaurua std::shared_timed_mutex, e tāpiri ana try_lock_shared_for() me try_lock_shared_until() mō ngā nganatanga wā. Ko te std::shared_mutex a C++17 ka whakaheke i nga momo wa mo te whakatinanatanga ngawari ake. Mena ka hiahia koe ki te maukati i te wa i runga i te ara tiritahi, std::shared_timed_mutex kei te waatea tonu, a he tino paerewa nga momo e rua.
Mo etahi atu raka-kore, std:: atomic me te ota mahara tupato ka taea i etahi wa te whakakapi i te mutex mo nga haki ngawari, mo nga porotiti ranei, engari mo nga hanganga raraunga uaua, std::shared_mutex ka noho tonu te otinga tino taea te panui me te tiaki i te whare pukapuka paerewa.
Patai Auau
Ka taea e std::shared_mutex te matekai?
Ae, ka taea. Ki te tae tonu mai nga kaimau maukati tiritahi hou, ka tatari tonu te kai tono raka motuhake — he raruraru kaituhituhimatarohia. Karekau te paerewa C++ e whakahau i tetahi kaupapa here tika, no reira ka whakawhirinaki te whanonga ki te whakatinanatanga. I roto i te mahi, ko te nuinga o nga whakahaerenga whare pukapuka e aro nui ana ki nga kati motuhake kei te tatari kia tutiraa, engari me manatoko koe mo to mekameka taputapu me to papaahi mena ka raru te matekai i roto i nga mahi whakaputa.
He haumaru te std::shared_mutex ki te whakamahi me te std::condition_variable?
std::condition_variable me whai std::unique_lock, no reira karekau e hototahi ki std::shared_mutex. Mena ka hiahia koe ki te tatari mo tetahi here i a koe e pupuri ana i te mutex tiritahi, whakamahia std::condition_variable_any, e mahi ana me tetahi momo BasicLockable, tae atu ki std::shared_mutex kua honoa ki te std::shared_lock.
Me tāpiri kōrero au i ia wā ka whakamahi ahau i te std::shared_mutex?
I te iti rawa, korerohia te whakapuakanga o te mutex hei whakaahua he aha nga raraunga ka tiakina e ia me nga rerekee ka mau tonu. I ia pae raka, he korero poto e whakamarama ana he aha te take i kowhiria ai te uru atu me te uru motuhake hei taapiri i te uara nui mo nga kaiarotake waehere me nga kai tiaki a meake nei. Ko nga pepeha Concurrency tetahi o nga mea tino uaua ki te whakaputa me te whakatika, no reira ko te haumi i roto i nga korero marama, tika, he maha nga wa ka utua.
Ko te whakahaere i nga punaha uaua — ahakoa he tohu C++ kotahi, he mahi pakihi katoa ranei — me tono nga taputapu tika me te hanga marama. MewayzKo te OS pakihi 207-module e whakawhirinakihia ana e te neke atu i te 138,000 nga kaiwhakamahi ki te kawe i taua maramatanga ki te hokohoko, CRM, e-tauhokohoko, tātaritanga, me etahi atu, katoa i roto i te papa kotahi ka timata i te $19 noa ia marama. Kati te tarai i nga tini taputapu momotu ka timata ki te whakahaere i to pakihi me te tika o te raupaparorohiko i hangaia pai. Whakamātauria a Mewayz i tenei ra ki app.mewayz.com ka kite me pehea te whakarereketanga o te punaha whakakotahi i te mahi a to roopu.
We use cookies to improve your experience and analyze site traffic. Cookie Policy