Hacker News

Std:Shared_mutex ካብ C++17 ምርዳእ

ርእይቶታት

2 min read Via www.cppstories.com

Mewayz Team

Editorial Team

Hacker News

std::shared_mutex ካብ C++17

ምርዳእ

std::shared_mutex፡ ኣብ C++17 ዝተኣታተወ ኮይኑ፡ ብዙሓት ፈትሊታት ብሓንሳብ ዝተኻፈሉ (ንባብ) መዕጸዊታት ክሕዙ ዘኽእል ኮይኑ፡ ንናይ ጽሕፈት ስርሓት ፍሉይ መእተዊ ዘረጋግጽ እዩ። ኣብ ዘመናዊ ሲ++ ሓደ ካብቶም ዝበዝሑ ናይ ተጓናጻጽነት ብድሆታት ይፈትሕ፡ ንደቨሎፐራት ንሳልሳይ ወገን ቤተ-መጻሕፍቲ ወይ መድረኽ-ፍሉይ ኤፒኣይ ከይበጽሑ ንኣንባቢ-ጸሓፊ ምዕጻው ንምትግባር ጽሩይን ደረጃ ዘለዎን መንገዲ ብምሃብ።

std::shared_mutex ብልክዕ እንታይ እዩ ኣብ C++17 ንምንታይ ተወሰኸ?

ቅድሚ C++17፡ ትርጉም ኣንባቢ-ጸሓፊ ዘድልዮም ዲቨሎፐራት፡ ኣብ ፕላትፎርም-ፍሉይ ፍታሕ ከም pthread_rwlock_t ኣብ POSIX ስርዓታት ወይ SRWLOCK ኣብ ዊንዶውስ ክምርኮሱ ነይርዎም፡ እንተዘይኮይኑ ከም Boost ዝኣመሰሉ ሳልሳይ ወገን ቤተ-መጻሕፍቲ ክጥቀሙ ነይርዎም። ሽማግለ ስታንዳርድ ሲ++17 ነዚ ክፍተት ኣለልዩ ብቐጥታ ንምፍታሕ ኣብቲ ዝብል ርእሲ std::shared_mutex ኣተኣታትዩ።

እቲ ቀንዲ ሓሳብ ቅኑዕ እዩ: ኣብ ብዙሓት ናይ ሓቂ ዓለም ፕሮግራማት ዳታ ካብቲ ዝጽሓፍ ኣዝዩ ዝበዝሕ ግዜ ይንበብ። ሓደ መደበኛ std::mutex ንኹሉ መእተዊ ተኸታታሊ ይገብሮ — ንባባት ሓዊሱ — እዚ ድማ ዘየድሊ ዕንቅፋት ይፈጥር። std::shared_mutex ነቲ ገደብ ኣብ መንጎ ክልተ ናይ ምዕጻው ሞድታት ብምፍላይ የልዕሎ:

    ዝብል ጽሑፍ ኣሎ።
  • ተኻፊሉ (ንባብ) መዕጸዊ — ብመንገዲ lock_shared() ዝተረኽበ፤ ብዙሓት ፈትሊታት ነዚ ብሓንሳብ ክሕዝዎ ይኽእሉ እዮም፣ እዚ ድማ ንተመሳሳሊ ንባባት ምቹእ ይገብሮ።
  • ፍሉይ (ምጽሓፍ) መዕጸዊ — ብመንገዲ lock() ዝተረኽበ፤ ኣብ ሓደ እዋን ሓደ ፈትሊ ጥራይ እዩ ነዚ ክሕዞ ዝኽእል፣ ኣብ ዝሕዘሉ እዋን ድማ ዝኾነ ናይ ሓባር መዕጸዊ ኣይፍቀድን እዩ።
  • std::shared_lock — ኣብ ህንጸት lock_shared() ኣብ ዕንወት ድማ unlock_shared() ዝጽውዕ RAII መጠቕለሊ ኮይኑ፡ ምፍሳስ ጸጋታት ይከላኸል።
  • std::unique_lock / std::lock_guard — ምስቲ ፍሉይ ሞድ ዝጥቀም፣ ስርሓት ምጽሓፍ ምሉእ ብምሉእ ዝተሓለዉን ፍሉያት-ውሑስን ምዃኖም የረጋግጽ።
ዝብል ጽሑፍ ኣሎ። |

ኣብ ሓቀኛ ኮድ ምስ ርእይቶታት std::shared_mutex ብኸመይ ትጥቀመሉ?

ኣብ std::shared_mutex ዝጥቀም ኮድ ዝቐርቡ ርእይቶታት ብፍላይ ዋጋ ዘለዎም እዮም ምኽንያቱ ናይ ተጓናጺ ስነ-መጐት ንምምኽናይ ኣጸጋሚ ምዃኑ ዕሉል እዩ። ኣብ ጽቡቕ ቦታ ዝተቐመጡ ርእይቶታት ስለምንታይ ሓደ ፍሉይ ዓይነት መዕጸዊ ከም ዝተመርጸ የነጽር፣ እዚ ድማ ንመጻኢ ጽገናውያን ብጌጋ ውድድራት ዳታ ናይ ምትእትታው ሓደጋ ብዓቢኡ ይንክዮ። ሓደ ልሙድ ቅዲ ኣብዚ ኣሎ፡

<ቅድመ-ኮድ># ኣካትት። #<ዘይተሰርዐ_ካርታ> ኣካትት። # ኣካትት። class ኮንፊግረጂስትሪ { ተለዋዋጢ std::ተኻፊሉ_ሙቴክስ mtx_; // ነቲ ኣብ ታሕቲ ዘሎ ካርታ ይከላኸለሉ። std::ዘይተሰርዐ_ካርታ ዳታ_; ህዝባዊ: // መንገዲ ንባብ: ብዙሓት ፈትሊታት ነዚ ብሓንሳብ ክጽውዕዎ ይኽእሉ std::string get(const std::ሕብረ-ቁጽሪ& መፍትሕ) const { std::ተኻፊሉ_መዕጸዊ መዕጸዊ (mtx_); // shared lock — ንተመሳሳሊ ንባባት ውሑስ እዩ። auto it = ዳታ_.ርኸብ (መፍትሕ); ምምላስ != ዳታ_.መወዳእታ() ? it->ካልኣይ : ""; } // መንገዲ ምጽሓፍ: ፍሉይ መእተዊ የድሊ void set(const std::ሕብረ-ቁጽሪ& መፍትሕ, const std::ሕብረ-ቁጽሪ& val) { std::ፍሉይ_መዕጸዊ መዕጸዊ (mtx_); // exclusive lock — ንኹሎም ኣንበብቲ ይዓግቶም ዳታ_[ቁልፊ] = val; } }; ዝብል ጽሑፍ ኣሎ።

እቶም ርእይቶታት ነቲ ኮድ ዝገብሮ ዳግማይ ካብ ምዝራብ፡ ነቲ ድሕሪ ነፍሲ ወከፍ ምርጫ መዕጸዊ ዘሎ ዕላማ ብኸመይ ከም ዝገልጽዎ ኣስተውዕል። እዚ እዩ እቲ ወርቃዊ መለክዒ፡ ርእይቶታት ንምንታይ እምበር እንታይ ክምልሱ ኣይግባእን። እቲ mutable ቁልፊ ቃል ኣብቲ mutex get() ገና ክዕጾ እናኸኣልካ const ተባሂሉ ክእወጅ የኽእል፣ ልሙድን ምሳሌኣውን ቅዲ።

<ብሎክኮት> ዝብል ጽሑፍ ኣሎ።

ቁልፊ ርድኢት: ኩሉ ግዜ RAII መዕጸዊ መጠቕለሊታት (std::shared_lock, std::unique_lock) ምስ std::shared_mutex ተጠቐም — lock()unlock()ን ብኢድካ ፈጺምካ ኣይትጽውዕ። ፍሉያት ኣብ ዘለዉሉ ብኢድ ምዕጻው ናብ ዕጽውነትን ዘይተገልጸ ባህርያትን ዝወስድ ውሕስነት ዘለዎ መንገዲ እዩ።

ዝብል ጽሑፍ ኣሎ።

ብ std::shared_mutex ክንሰርሕ ከለኻ ዝረኣዩ ልሙዳት መጻወድያታት እንታይ እዮም?

ዋላ ንጹር ርእይቶታትን ጽቡቕ ዕላማን እንተሃለወ፡ std::shared_mutex ንሙኩራት ኣዳለውቲ ዘዕንቅፍ ረቀቕቲ መጻወድያታት ኣለዎ። እቲ ኣዝዩ ሓደገኛ lock upgrade እዩ: ንሓደ ናይ ሓባር መዕጸዊ መጀመርታ ከይፈታሕካ ናብ ፍሉይ መዕጸዊ ንምዕባይ ኣብ ውሽጡ ዝተሃንጸ መንገዲ የለን። ብዘይ ምፍታሕ ከምኡ ክትገብር ምፍታን ቅጽበታዊ ዕጽው ይፈጥር ምኽንያቱ እቲ ፈትሊ ዝኾነ ናይ ሓባር መዕጸዊ ክሳብ ዘሎ ፈጺሙ ክወሃብ ዘይክእል ፍሉይ መዕጸዊ እናተጸበየ ናይ ሓባር መዕጸዊ ይሕዝ — እንተላይ ነቲ ዝሓዞ መዕጸዊ።

ካልእ ልሙድ ጌጋ ንጌጋ ግራኑላሪቲ ምሕላው እዩ። ሓደ ሓደ ግዜ ኣዳለውቲ ኣዝዩ ሰፊሕ ይዕጾ፣ ንዕላማ ናይቲ ኣንባቢ-ጸሓፊ ቅዲ ይስዕሮ፣ ወይ ድማ ኣዝዩ ጸቢብ፣ ኣብ መንጎ ክልተ ዝተፈላለዩ ናይ መዕጸዊ ምጥራይ ዘይልወጡ ዝጥሕሱ መስኮታት ይገድፉ። ነቲ ዘይልወጥ ዝሕሎ ዘሎ ዝገልጽ ርእይቶታት፡ ኣብ ክንዲ እቲ ተለዋዋጢ ጥራይ ዝዕጾ፡ ጋንታታት ኣብ እዋን ምግምጋም ኮድ ብዛዕባ ቅኑዕነት ክመሳሰላ ይሕግዛ።

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

Performance can also surprise you. ኣብ ብዙሓት ጸሓፍቲ ዘለዎም ኣዝዮም ተኻታዕቲ ስርዓታት፡ std::shared_mutex ብሓቂ ብሰንኪ እቲ ተወሳኺ ናይ መዝገብ ምሕደራ ልዕሊ ዋጋ ካብ ንቡር std::mutex ዝኸፍአ ውጽኢት ክህልዎ ይኽእል። ኩሉ ግዜ ቅድሚ ኣንባቢ-ጸሓፊ ምዕጻው ጽሩይ ዓወት እዩ ኢልካ ምግማትካ ፕሮፋይል ግበር።

std::shared_mutex ምስ std::mutexን ካልኦት ኣማራጺታትን ብኸመይ ይወዳደር?

std::mutex ዝቐለለ፣ ክትዕ ትሑት ኣብ ዝኾነሉ እዋን ንምርካብ ዝቐልጠፈ፣ ንባብን ምጽሓፍን ብግምት ብማዕረ ፍሪኩዌንሲ ምስ ዝፍጸም ድማ ግቡእ እዩ። std::shared_mutex ንባባት ካብ ምጽሓፍ ብዓቢኡ ክበልጹ ከለዉ ይደምቕ — 10:1 ወይ ልዕሊኡ ሬሾ ቅድሚ ነቲ ምቕያር ኣብ ግምት ምእታውካ ርትዓዊ ሕጊ እዩ።

C++14 std::shared_timed_mutex ኣተኣታትዩ፣ እዚ ድማ try_lock_shared_for()try_lock_shared_until()ን ንእዋናዊ ፈተነታት ይውስኽ። ናይ C++17 std::shared_mutex ንዝጸረየ ኣተገባብራ ነቶም ግዜ ዝሓለፉ ፍልልያት የውድቖም። ኣብቲ ዝተኻፈለ መንገዲ ግዜ ዘለዎ ምዕጻው እንተድኣ ኣድልዩካ፡ std::shared_timed_mutex ይቕጽልን ክልቲኦም ዓይነታት ምሉእ ብምሉእ ደረጃ ዘለዎም እዮም።

ንካብ መዕጸዊ ነጻ ዝኾኑ ኣማራጺታት፡ std::atomic ምስ ጥንቁቕ ስርዓት ዝኽሪ ተደሚሩ ሓደ ሓደ ግዜ ንቐለልቲ ሰንደቕ ዕላማታት ወይ ቆጸርቲ ምሉእ ብምሉእ ንሓደ ሙቴክስ ክቕይሮ ይኽእል እዩ፡ ንዝተሓላለኹ ኣቃውማታት ዳታ ግን፡ std::shared_mutex ኣብቲ መደበኛ ቤተ-መጻሕፍቲ እቲ ዝያዳ ተነባቢን ዝዕቀብን ፍታሕ ኮይኑ ይቕጽል።

ብተደጋጋሚ ዝሕተቱ ሕቶታት

std::shared_mutex ጥሜት ከስዕብ ይኽእል ድዩ?

እወ ይኽእል እዩ። ሓደስቲ ናይ ሓባር-መዕጸዊ ወነንቲ ብቐጻሊ እንተመጺኦም፡ ሓደ ፍሉይ-መዕጸዊ ሓታቲ ንዘይተወሰነ እዋን ክጽበ ይኽእል እዩ — ክላሲካል ጥሜት ጸሓፊ ጸገም። እቲ ናይ C++ ደረጃ ፍሉይ ፖሊሲ ፍትሓውነት ኣይእዝዝን እዩ፣ ስለዚ ባህሪ ኣብቲ ኣተገባብራ ይምርኮስ። ብተግባር፡ መብዛሕትኦም ስታንዳርድ ቤተ-መጻሕፍቲ ኣተገባብራታት ንዝጽበዩ ፍሉያት መዕጸዊታት ሓንሳብ ሪጋ ምስ ኣተዉ ቀዳምነት ይህቡ፡ እንተኾነ ግን ጥሜት ኣብ ምፍራይ ስክፍታ እንተኾይኑ ንፍሉይ መሳርሒ ሰንሰለትካን መድረኽካን ነዚ ከተረጋግጽ ኣለካ።

std::shared_mutex ምስ std::condition_variable ንምጥቃም ውሑስ ድዩ?

std::condition_variable std::unique_lock ስለዘድልዮ፡ ምስ std::shared_mutex ብቐጥታ ኣይሰማማዕን እዩ። ዝተኻፈለ ሙቴክስ እናሓዝካ ኣብ ሓደ ኩነታት ክትጽበ እንተድኣ ኣድልዩካ፡ std::condition_variable_any ተጠቐም፡ እዚ ምስ ዝኾነ ዓይነት BasicLockable ይሰርሕ፡ እንተላይ std::shared_mutex ምስ std::shared_lock.

ዝተጻምደ

std::shared_mutex ኣብ ዝጥቀመሉ ኩሉ ግዜ ርእይቶታት ክውስኽ ድየ ዘለኒ?

ብውሑዱ ነቲ ኣዋጅ ናይቲ ሙቴክስ ርእይቶ ብምሃብ እንታይ ዓይነት ዳታ ከም ዝሕሉን ዘይልወጡን ከም ዝሕሉ ንምግላጽ። ኣብ ነፍሲ ወከፍ ናይ መዕጸዊ ቦታ፡ ስለምንታይ ናይ ሓባር ኣንጻር ፍሉይ ተበጻሕነት ከም ዝተመርጸ ዝገልጽ ሓጺር ርእይቶ ንገምገምቲ ኮድን መጻኢ ተሓለቕትን ርኡይ ዋጋ ይውስኽ። ናይ ተደጋጋሚ ስሕተት ካብቶም ንምብዛሕን ንምእራምን ዝኸበዱ ስለዝኾኑ፡ እቲ ኣብ ንጹርን ልክዕን ርእይቶታት ዝግበር ወፍሪ ብብዙሕ ዕጽፊ ረብሓ ይኸፍል።


ዝብል ጽሑፍ ኣሎ።

ምምሕዳር ዝተሓላለኹ ስርዓታት — ተጓናጺ C++ ኮድ ይኹን ምሉእ ንግዳዊ ስርሓት — ቅኑዕ መሳርሕታትን ንጹር ቅርጽን ይሓትት። Mewayz እቲ ብልዕሊ 138,000 ተጠቀምቲ ዝኣምኖ 207-ሞዱል ቢዝነስ ኦኤስ ኮይኑ፡ ተመሳሳሊ ንጹርነት ናብ ዕዳጋ፡ ሲኣርኤም፡ ኢ-ኮሜርስ፡ ትንታነታትን ካልእን ከምጽእ እዩ፡ ኩሉ ኣብ ሓደ መድረኽ ካብ $19 ጥራይ ኣብ ወርሒ ዝጅምር። ዓሰርተታት ዝተቛረጹ መሳርሒታት ምትሕውዋስ ኣቋርጽ እሞ ንግድኻ ብትኽክል ብጽቡቕ ዲዛይን ሶፍትዌር ከተካይድ ጀምር። ሎሚ ኣብ app.mewayz.com ንመዋይዝ ፈትኖ እሞ ሓደ ውሁድ ስርዓት ንኣገባብ ስራሕ ጋንታኻ ብኸመይ ከም ዝቕይሮ ርአ።

ረብሓ ይኸፍል

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