Hacker News

C++17 އިން Std:Shared_mutex އަށް ވިސްނުން

ކޮމެންޓްތައް

2 min read Via www.cppstories.com

Mewayz Team

Editorial Team

Hacker News

C++17

އިން std::shared_mutex އަށް ވިސްނުން C++17 ގައި ތަޢާރަފްކުރެވުނު

std::shared_mutex އަކީ ރައިޓް އޮޕަރޭޝަންތަކަށް ޚާއްޞަ އެކްސެސް ކަށަވަރުކޮށްދޭއިރު، އެއްފަހަރާ ގިނަ ތްރެޑްތަކަށް ޝެއަރޑް (ރީޑް) ލޮކްތައް ހިފެހެއްޓޭނެ ސިންކްރޮނައިޒޭޝަން ޕްރިމިޓިވްއެކެވެ. މިއީ ތިންވަނަ ފަރާތެއްގެ ލައިބްރަރީ ނުވަތަ ޕްލެޓްފޯމް ސްޕެސިފިކް އެޕީއައި އަށް އަތް ނުލައި ރީޑަރ-ރައިޓަރ ލޮކިންގ ތަންފީޒު ކުރުމަށް ޑިވެލޮޕަރުންނަށް ސާފު، ސްޓޭންޑަރޑް ގޮތެއް ދީގެން ޒަމާނީ ސީ++ ގައި އެންމެ އާންމު އެއް ކޮންކަރެންސީ ގޮންޖެހުން ހައްލުކޮށްދޭ އެއްޗެކެވެ.

std::shared_mutex އަކީ ސީދާ ކޮން އެއްޗެއް ކަމާއި، ސީ++17 ގައި އިތުރުކުރީ ކީއްވެގެން ހެއްޔެވެ؟

ސީ++17 ގެ ކުރިން ރީޑަރ-ރައިޓަރ ސެމަންޓިކްސް ބޭނުންވާ ޑިވެލޮޕަރުންނަށް ބަރޯސާވާން ޖެހުނީ ޕޮސިކްސް ސިސްޓަމްތަކުގައި pthread_rwlock_t ނުވަތަ ވިންޑޯޒްގައި SRWLOCK ފަދަ ޕްލެޓްފޯމް ސްޕެސިފިކް ސޮލިއުޝަންތަކަށެވެ. ސީ++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 ބޭނުންކުރާނީ ކިހިނެއް؟

std::shared_mutex ބޭނުންކުރާ ކޯޑުގައި ހުންނަ ކޮމެންޓްތައް ވަކިން ޚާއްޞަކޮށް އަގުހުރި ސަބަބަކީ ކޮންކަރެންސީ ލޮޖިކް އަކީ ވިސްނާލަން އުނދަގޫ އެއްޗަކަށް ވާތީއެވެ. ރަނގަޅަށް ބެހެއްޓިފައިވާ ކޮމެންޓްތަކުން ސާފުވާ ގޮތުގައި ކީއްވެގެން ވަކި ލޮކް ވައްތަރެއް ހޮވީ، މިއީ ކުރިއަށް އޮތް ތަނުގައި މެއިންޓެއިން ކުރާ ފަރާތްތަކުން ގޯސްކޮށް ޑޭޓާ ރޭސްތައް ތައާރަފް ކުރުމުގެ ނުރައްކާ ވަރަށް ބޮޑަށް ކުޑަކޮށްދޭ ކަމެކެވެ. މިއީ އާދައިގެ އުސޫލެއް:

#include <ޝެއަރޑް_މިއުޓެކްސް>
#include <އަންއޯޑަރޑް_މެޕް>
#include 

class ކޮންފިގްރެޖިސްޓްރީ {
    މުއުޓަބަލް std::ޝެއަރޑް_މިއުޓެކްސް mtx_; // ތިރީގައިވާ މެޕް ރައްކާތެރިކުރެއެވެ
    std::unordered_map ޑޭޓާ_؛

އާންމު:
    // ރީޑް ޕަތު: ގިނަ ތްރެޑްތަކުން އެއްފަހަރާ މިކަމަށް ގޮވާލެވިދާނެއެވެ
    std::string get(const std::string& ކީ) ކޮންސްޓް {
        std::ޝެއަރޑް_ލޮކް ލޮކް (mtx_); // ޝެއަރޑް ލޮކް — އެއްފަހަރާ ރީޑްސް އަށް ރައްކާތެރި
        އޮޓޯ އިޓް = ޑޭޓާ_.ފައިންޑް(ކީ);
        ރިޓަރން އިޓް != ޑޭޓާ_.އެންޑް() ? it->second : "";
    }

    // ލިޔުމުގެ މަގު: އެކްސްކްލޫސިވް އެކްސެސް ބޭނުންވެއެވެ
    void set(ކޮންސްޓް އެސްޓީޑީ::ސްޓްރިންގް& ކީ، ކޮންސްޓް އެސްޓީޑީ::ސްޓްރިންގް& val) {
        std::ޔުނިކް_ލޮކް ލޮކް (mtx_); // އެކްސްކްލޫސިވް ލޮކް — ހުރިހާ ރީޑަރުން ބްލޮކް ކުރެއެވެ
        ޑޭޓާ_[ކީ] = ވަލް؛
    }
};

ހަމައެކަނި ކޯޑުން ކުރާ ކަންތައްތައް އަލުން ކިޔައިދިނުމަށްވުރެ ކޮންމެ ލޮކް ޗޮއިސްއެއްގެ ފަހަތުގައިވާ ނިޔަތް ކޮމެންޓްތަކުން ބަޔާންކޮށްދޭ ގޮތް ފާހަގަ ކުރާށެވެ. މިއީ ރަން މިންގަނޑެވެ: ކޮމެންޓްތަކުން ޖަވާބު ދޭންވާނީ ކީއްވެ، ކޮންކަމެއް ނޫން. މިއުޓެކްސްގައިވާ mutable ކީވޯޑުން get() އަށް const ޑިކްލެއާ ކުރެވޭއިރު އަދިވެސް ލޮކް ކުރެވޭއިރު، އާންމު އަދި އިޑިއޮމެޓިކް ޕެޓަރންއެކެވެ.

<ބްލޮކްކޯޓް> އެވެ

ކީ އިންސައިޓް: އަބަދުވެސް std::shared_mutex އާއެކު ރޭއި ލޮކް ރެޕަރސް (std::shared_lock، std::unique_lock) ބޭނުން ނުކުރާށެވެ — ދުވަހަކުވެސް lock() އަދި unlock() އަށް އަމިއްލައަށް ނުގުޅާށެވެ. އިސްތިސްނާ ކަންތައްތަކުގެ ޙާޟިރުގައި މެނުއަލްކޮށް ލޮކް ކުރުމަކީ ޑެޑްލޮކްތަކާއި ކަނޑައެޅިފައި ނުވާ ސުލޫކަށް ދިއުމަށް ކަށަވަރު މަގެވެ.

އެވެ

std::shared_mutex އާއެކު މަސައްކަތް ކުރާއިރު އާންމުކޮށް ދިމާވާ ދަތިތަކަކީ ކޮބައިތޯ؟

ސާފު ކޮމެންޓްތަކާއި ރަނގަޅު ނިޔަތެއްގައި ވެސް، std::shared_mutex ގައި ތަޖުރިބާކާރު ޑިވެލޮޕަރުންނަށް ޓްރިޕް ކުރާ ނާޒުކު މަޅިތަކެއް ހުރެއެވެ. އެންމެ ނުރައްކާތެރި ކަމަކީ ލޮކް އަޕްގްރޭޑް: ޝެއަރޑް ލޮކެއް ފުރަތަމަ ދޫކޮށްނުލާ އެކްސްކްލޫސިވް ލޮކަކަށް އަޕްގްރޭޑް ކުރެވޭނެ ބިލްޓް-އިން ގޮތެއް ނެތެވެ. ރިލީޒް ނުކޮށް އެކަން ކުރަން މަސައްކަތް ކުރުމުން ވަގުތުން ޑެޑްލޮކެއް އުފެދެނީ އެއްވެސް ޝެއަރޑް ލޮކެއް އޮތްހާ ހިނދަކު ދުވަހަކުވެސް ނުދެވޭނެ އެކްސްކްލޫސިވް ލޮކަށް އިންތިޒާރު ކުރަމުން ދަނިކޮށް ޝެއަރޑް ލޮކެއް ހިފަހައްޓާތީއެވެ.

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

އާންމުކޮށް ހެދޭ އަނެއް ގޯހަކީ ގޯސް ގްރެނިއުލަރިޓީ ރައްކާތެރިކުރުމެވެ. ޑިވެލޮޕަރުން ބައެއް ފަހަރު މާ ފުޅާކޮށް ލޮކްކޮށް، ރީޑަރ-ރައިޓަރ ޕެޓަރންގެ މަގުސަދު ބަލިކޮށް، ނުވަތަ މާ ހަނިކޮށް، ވަކި ދެ ލޮކް އެކްވިޒިޝަންގެ މެދުގައި އިންވަރިއަންޓްސް އާއި ހިލާފުވާ ވިންޑޯތައް ދޫކޮށްލައެވެ. ހަމައެކަނި ލޮކް ކުރެވިފައިވާ ވެރިއޭބަލް އަށް ވުރެ ބޮޑަށް އިންވަރިއަންޓް ޕްރޮޓެކްޓް ކުރެވިފައިވާ ސިފަކުރާ ކޮމެންޓްތަކުން ކޯޑް ރިވިއު ކުރާއިރު ޓީމުތަކަށް ޞައްޙަކަމާ މެދު ވިސްނުމަށް އެހީތެރިވެދެއެވެ.

ޕާފޯމަންސް އިން ވެސް ހައިރާންކަން ލިބިދާނެ އެވެ. ގިނަ ލިޔުންތެރިންނާއެކު ވަރަށް ބޮޑަށް ވާދަވެރި ސިސްޓަމްތަކުގައި، އިތުރު ބުކްކީޕިންގ އޯވަހެޑްގެ ސަބަބުން، 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 ގެ ސަބަބުން ބަނޑުހައިހޫނުކަން އުފެދިދާނެ ހެއްޔެވެ؟

އާނ، ކުރެވޭނެ. އަލަށް ޝެއަރޑް-ލޮކް ހޯލްޑަރުން މެދުނުކެނޑި އަންނަމުންދާނަމަ، އެކްސްކްލޫސިވް-ލޮކް ރިކުއެސްޓަރަކު މުއްދަތެއް ނެތް ގޮތަށް މަޑުކޮށްފާނެ — މިއީ ކްލާސިކް ރައިޓަރ ސްޓާވޭޝަން މައްސަލައެކެވެ. ސީ++ ސްޓޭންޑަރޑްގައި ވަކި އިންސާފުވެރިކަމުގެ ސިޔާސަތެއް ކަނޑައަޅާފައި ނުވާތީ، ސުލޫކު ބިނާވެފައިވަނީ ތަންފީޒުކުރުމުގެ މައްޗަށެވެ. ޢަމަލީގޮތުން ބަލާއިރު، ގިނަ ސްޓޭންޑަރޑް ލައިބްރަރީ އިމްޕްލިމެންޓޭޝަންތަކުން ޕެންޑިންގ އެކްސްކްލޫސިވް ލޮކްތަކަށް އިސްކަންދެނީ ކިއު ހެދުމުން ނަމަވެސް، ޕްރޮޑަކްޝަންގައި ބަނޑުހައިހޫނުވުމަކީ ކަންބޮޑުވުމެއްނަމަ، ތިބާގެ ވަކި ޓޫލްޗޭން އަދި ޕްލެޓްފޯމަކަށް މިކަން ޔަގީންކުރަންވާނެއެވެ.

std::shared_mutex std::condition_variable އާއެކު ބޭނުންކުރުމަކީ ރައްކާތެރި އެއްޗެއް ހެއްޔެވެ؟

std::condition_variable އަށް ބޭނުންވަނީ std::unique_lock ކަމުން، އެއީ ސީދާ std::shared_mutex އާ އެއްގޮތް އެއްޗެއް ނޫނެވެ. ޝެއަރޑް މީއުޓެކްސް އެއް ހިފަހައްޓައިގެން ހުރެ ޝަރުޠެއްގައި މަޑުކުރަން ޖެހިއްޖެނަމަ، std::condition_variable_any ބޭނުންކުރާށެވެ، މިއީ std::shared_mutex އާއި ޖޯޑުކޮށްފައިވާ std::shared_lock.

އެއް ހިމެނޭ ގޮތަށް، ކޮންމެ BasicLockable ވައްތަރަކާވެސް މަސައްކަތްކުރާ އެއްޗެކެވެ

std::shared_mutex ބޭނުންކުރާ ކޮންމެ ފަހަރަކު ކޮމެންޓް އިތުރުކުރަންވީ ހެއްޔެވެ؟

އެންމެ ކުޑަމިނުން، މީއުޓެކްސްގެ ޑިކްލެރޭޝަން ކޮމެންޓްކޮށް، އެއިން ރައްކާތެރިކުރާ ޑޭޓާއާއި، އެއިން ބެލެހެއްޓޭ އިންވަރިއަންޓްސް ބަޔާންކުރުން. ކޮންމެ ލޮކް ސައިޓެއްގައި ވެސް ޝެއަރޑް އާއި އެކްސްކްލޫސިވް އެކްސެސް ހޮވުނީ ކީއްވެގެންކަން ބަޔާންކޮށް ކުރު ކޮމެންޓެއް ދިނުމަކީ ކޯޑް ރިވިއު ކުރާ ފަރާތްތަކަށާއި ކުރިއަށް އޮތް ތަނުގައި ބެލެހެއްޓުންތެރިންނަށް ބޮޑު އަގެއް އިތުރުކޮށްދޭ ކަމެކެވެ. ކޮންކަރެންސީ ބަގްސް އަކީ ރިޕްރޮޑަކްޓްކޮށް ރަނގަޅު ކުރަން އެންމެ އުނދަގޫ ބަގްތަކުގެ ތެރޭގައި ހިމެނޭ ބަގްތަކެއް ކަމުން ސާފު، ސީދާ ކޮމެންޓްތަކަށް ކުރާ އިންވެސްޓްމަންޓުން ޑިވިޑެންޑް އެތައް ގުނައެއް ލިބެއެވެ.


އެވެ

ކޮމްޕްލެކްސް ސިސްޓަމްތައް މެނޭޖްކުރުމުގައި — ކޮންކަރެންޓް ސީ++ ކޯޑެއް ވިޔަސް ނުވަތަ މުޅި ވިޔަފާރީގެ އޮޕަރޭޝަނެއް ވިޔަސް — ޑިމާންޑް ކުރަނީ ރަނގަޅު ވަސީލަތްތަކާއި ސާފު އޮނިގަނޑެކެވެ. މެވޭޒް އަކީ މާކެޓިން، ސީއާރްއެމް، އީ-ކޮމާސް، އެނަލިޓިކްސް އަދި އެހެނިހެން ކަންކަމަށް ވެސް ހަމަ އެ ސާފުކަން ގެނައުމަށް 138،000 އަށް ވުރެ ގިނަ ޔޫޒަރުން އިތުބާރުކުރާ 207 މޮޑިއުލްގެ ބިޒްނަސް އޮއެސް އެވެ. ގުޅުން ކެނޑިފައިވާ ދިހަވަރަކަށް ޓޫލް ޖަގްލް ކުރުން ހުއްޓާލައި، ރަނގަޅަށް ފަރުމާކޮށްފައިވާ ސޮފްޓްވެއާގެ ޕްރެސިޝަން އާއި އެކު ވިޔަފާރި ހިންގަން ފަށާށެވެ. މިއަދު 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