ਇੱਕ C++ ਸਿੰਗਲਟਨ ਦਾ ਸਰਵੋਤਮ ਪ੍ਰਦਰਸ਼ਨ | Mewayz Blog Skip to main content
Hacker News

ਇੱਕ C++ ਸਿੰਗਲਟਨ ਦਾ ਸਰਵੋਤਮ ਪ੍ਰਦਰਸ਼ਨ

ਟਿੱਪਣੀਆਂ

2 min read Via andreasfertig.com

Mewayz Team

Editorial Team

Hacker News

ਪਰਫੈਕਟ ਸਿੰਗਲਟਨ ਦਾ ਪਿੱਛਾ: ਇੱਕ ਸਥਾਈ C++ ਚੁਣੌਤੀ

ਸਾਫਟਵੇਅਰ ਡਿਜ਼ਾਈਨ ਪੈਟਰਨਾਂ ਦੇ ਵਿਸ਼ਾਲ ਲੈਂਡਸਕੇਪ ਵਿੱਚ, ਕੁਝ ਲੋਕਾਂ ਨੇ ਸਿੰਗਲਟਨ ਵਾਂਗ ਬਹਿਸ, ਨਵੀਨਤਾ, ਅਤੇ ਇੱਥੋਂ ਤੱਕ ਕਿ ਵਿਵਾਦ ਵੀ ਛੇੜਿਆ ਹੈ। ਇਸਦਾ ਟੀਚਾ ਧੋਖੇ ਨਾਲ ਸਧਾਰਨ ਹੈ: ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਇੱਕ ਕਲਾਸ ਵਿੱਚ ਸਿਰਫ ਇੱਕ ਉਦਾਹਰਣ ਹੈ ਅਤੇ ਇਸ ਤੱਕ ਪਹੁੰਚ ਦਾ ਇੱਕ ਗਲੋਬਲ ਪੁਆਇੰਟ ਪ੍ਰਦਾਨ ਕਰੋ। ਕੌਂਫਿਗਰੇਸ਼ਨ ਸੈਟਿੰਗਾਂ ਦੇ ਪ੍ਰਬੰਧਨ ਤੋਂ ਲੈ ਕੇ ਇੱਕ ਸਾਂਝਾ ਸਰੋਤ ਜਿਵੇਂ ਕਿ ਇੱਕ ਡੇਟਾਬੇਸ ਕਨੈਕਸ਼ਨ ਪੂਲ ਤੱਕ ਪਹੁੰਚ ਨੂੰ ਨਿਯੰਤਰਿਤ ਕਰਨ ਤੱਕ, ਸਿੰਗਲਟਨ ਪੈਟਰਨ ਇੱਕ ਆਮ ਲੋੜ ਨੂੰ ਸੰਬੋਧਿਤ ਕਰਦਾ ਹੈ। ਹਾਲਾਂਕਿ, C++ ਵਿੱਚ, ਇੱਕ ਸਿੰਗਲਟਨ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨਾ ਜੋ ਥਰਿੱਡ-ਸੁਰੱਖਿਅਤ, ਕੁਸ਼ਲ, ਅਤੇ ਸੂਖਮ ਕਮੀਆਂ ਤੋਂ ਮੁਕਤ ਹੈ, ਭਾਸ਼ਾ ਦੇ ਵਿਕਾਸ ਦੁਆਰਾ ਇੱਕ ਯਾਤਰਾ ਹੈ। ਇਹ ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਭਰੋਸੇਯੋਗਤਾ ਦੀ ਖੋਜ ਹੈ ਜੋ ਮੇਵੇਜ਼ ਵਰਗੇ ਪਲੇਟਫਾਰਮਾਂ ਦੇ ਪਿੱਛੇ ਫਲਸਫੇ ਨੂੰ ਦਰਸਾਉਂਦੀ ਹੈ, ਜਿੱਥੇ ਇੱਕ ਸਥਿਰ ਵਪਾਰਕ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਬਣਾਉਣ ਲਈ ਮਜ਼ਬੂਤ, ਕੁਸ਼ਲ ਮਾਡਿਊਲਰ ਹਿੱਸੇ ਜ਼ਰੂਰੀ ਹਨ। "ਸਭ ਤੋਂ ਵਧੀਆ" ਲਾਗੂ ਕਰਨਾ ਇੱਕ ਇੱਕਲਾ ਜਵਾਬ ਨਹੀਂ ਹੈ ਪਰ ਤੁਹਾਡੇ ਪ੍ਰੋਜੈਕਟ ਦੇ ਸੰਦਰਭ ਲਈ ਖਾਸ ਲੋੜਾਂ ਦਾ ਸੰਤੁਲਨ ਹੈ।

ਭੋਲੀ ਸ਼ੁਰੂਆਤ ਅਤੇ ਮਲਟੀ-ਥ੍ਰੈਡਿੰਗ ਦੇ ਖਤਰੇ

ਸਭ ਤੋਂ ਸਿੱਧਾ ਸਿੰਗਲਟਨ ਲਾਗੂਕਰਨ ਇੱਕ ਸਥਿਰ ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ ਜੋ ਪਹਿਲੀ ਕਾਲ 'ਤੇ ਉਦਾਹਰਨ ਬਣਾਉਂਦਾ ਹੈ। ਹਾਲਾਂਕਿ, ਇਹ ਕਲਾਸਿਕ ਪਹੁੰਚ ਇੱਕ ਬਹੁ-ਥਰਿੱਡਡ ਸੰਸਾਰ ਵਿੱਚ ਇੱਕ ਨਾਜ਼ੁਕ ਨੁਕਸ ਹੈ। ਜੇਕਰ ਇੱਕ ਤੋਂ ਵੱਧ ਥ੍ਰੈੱਡ ਇੱਕੋ ਸਮੇਂ ਇਹ ਜਾਂਚ ਕਰਦੇ ਹਨ ਕਿ ਕੀ ਉਦਾਹਰਨ ਮੌਜੂਦ ਹੈ, ਤਾਂ ਉਹ ਸਾਰੇ ਇਸਨੂੰ ਰੱਦ ਕਰ ਸਕਦੇ ਹਨ ਅਤੇ ਆਪਣੇ ਖੁਦ ਦੇ ਉਦਾਹਰਨਾਂ ਬਣਾਉਣ ਲਈ ਅੱਗੇ ਵਧ ਸਕਦੇ ਹਨ, ਜਿਸ ਨਾਲ ਪੈਟਰਨ ਦੇ ਮੂਲ ਸਿਧਾਂਤ ਦੀ ਸਪੱਸ਼ਟ ਉਲੰਘਣਾ ਹੁੰਦੀ ਹੈ। ਜਦੋਂ ਕਿ ਰਚਨਾ ਦੇ ਤਰਕ ਦੇ ਆਲੇ ਦੁਆਲੇ ਇੱਕ ਮਿਊਟੇਕਸ ਲੌਕ ਜੋੜਨਾ ਡਾਟਾ ਰੇਸ ਨੂੰ ਹੱਲ ਕਰਦਾ ਹੈ, ਇਹ ਇੱਕ ਮਹੱਤਵਪੂਰਨ ਪ੍ਰਦਰਸ਼ਨ ਦੀ ਰੁਕਾਵਟ ਪੇਸ਼ ਕਰਦਾ ਹੈ। ਇੰਸਟੈਂਸ-ਗੈਟਰ ਨੂੰ ਹਰ ਕਾਲ, ਭਾਵੇਂ ਸਿੰਗਲਟਨ ਦੇ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸ਼ੁਰੂ ਹੋਣ ਤੋਂ ਬਾਅਦ, ਲਾਕ ਕਰਨ ਅਤੇ ਅਨਲੌਕ ਕਰਨ ਦਾ ਓਵਰਹੈੱਡ ਹੁੰਦਾ ਹੈ, ਜੋ ਕਿ ਬੇਲੋੜਾ ਅਤੇ ਮਹਿੰਗਾ ਹੁੰਦਾ ਹੈ। ਇਹ ਇੱਕ ਕਾਰੋਬਾਰੀ ਪ੍ਰਕਿਰਿਆ ਬਣਾਉਣ ਦੇ ਸਮਾਨ ਹੈ ਜਿੱਥੇ ਦਰਵਾਜ਼ੇ ਨੂੰ ਸਥਾਈ ਤੌਰ 'ਤੇ ਅਨਲੌਕ ਕੀਤੇ ਜਾਣ ਤੋਂ ਬਾਅਦ ਹਰ ਕਰਮਚਾਰੀ ਨੂੰ ਕਮਰੇ ਦੀ ਚਾਬੀ ਲਈ ਬੇਨਤੀ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ - ਸਮੇਂ ਅਤੇ ਸਰੋਤਾਂ ਦੀ ਬਰਬਾਦੀ। ਮੇਵੇਜ਼ ਵਰਗੇ ਉੱਚ-ਪ੍ਰਦਰਸ਼ਨ ਵਾਲੇ ਮਾਡਯੂਲਰ ਸਿਸਟਮ ਵਿੱਚ, ਕੋਰ ਪੱਧਰ 'ਤੇ ਅਜਿਹੀ ਅਕੁਸ਼ਲਤਾ ਅਸਵੀਕਾਰਨਯੋਗ ਹੋਵੇਗੀ।

ਆਧੁਨਿਕ C++ ਹੱਲ: `std::call_once` ਅਤੇ The Magic Statics

C++ 11 ਸਟੈਂਡਰਡ ਨੇ ਸ਼ਕਤੀਸ਼ਾਲੀ ਟੂਲ ਲਿਆਂਦੇ ਜਿਨ੍ਹਾਂ ਨੇ ਸਿੰਗਲਟਨ ਲਾਗੂਕਰਨ ਨੂੰ ਨਾਟਕੀ ਢੰਗ ਨਾਲ ਸੁਧਾਰਿਆ। ਅੱਜ ਸਭ ਤੋਂ ਮਜ਼ਬੂਤ ​​ਅਤੇ ਵਿਆਪਕ ਤੌਰ 'ਤੇ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਗਈ ਵਿਧੀ "ਮੈਜਿਕ ਸਟੈਟਿਕ" ਵਿਸ਼ੇਸ਼ਤਾ ਦਾ ਲਾਭ ਉਠਾਉਂਦੀ ਹੈ। ਸਿੰਗਲਟਨ ਉਦਾਹਰਨ ਨੂੰ ਫੰਕਸ਼ਨ ਦੇ ਅੰਦਰ ਇੱਕ ਸਥਿਰ ਵੇਰੀਏਬਲ ਦੇ ਰੂਪ ਵਿੱਚ ਘੋਸ਼ਿਤ ਕਰਕੇ (ਇੱਕ ਕਲਾਸ ਸਟੈਟਿਕ ਦੀ ਬਜਾਏ), ਅਸੀਂ ਭਾਸ਼ਾ ਦੀ ਗਾਰੰਟੀ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਾਂ ਕਿ ਸਥਿਰ ਵੇਰੀਏਬਲ ਇੱਕ ਥਰਿੱਡ-ਸੁਰੱਖਿਅਤ ਤਰੀਕੇ ਨਾਲ ਸ਼ੁਰੂ ਕੀਤੇ ਗਏ ਹਨ। ਕੰਪਾਈਲਰ ਹੁੱਡ ਦੇ ਹੇਠਾਂ ਲੋੜੀਂਦੇ ਲਾਕ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ, ਪਰ ਸਿਰਫ ਸ਼ੁਰੂਆਤੀ ਸ਼ੁਰੂਆਤ ਦੇ ਦੌਰਾਨ. ਅਗਲੀਆਂ ਕਾਲਾਂ ਇੱਕ ਸਧਾਰਨ ਪੁਆਇੰਟਰ ਜਾਂਚ ਵਾਂਗ ਤੇਜ਼ ਹਨ। ਇਹ ਪਹੁੰਚ, ਅਕਸਰ ਸਪਸ਼ਟ ਨਿਯੰਤਰਣ ਲਈ `std::call_once` ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਲਾਗੂ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਆਲਸੀ ਸ਼ੁਰੂਆਤ ਅਤੇ ਉੱਚ ਪ੍ਰਦਰਸ਼ਨ ਦੋਵੇਂ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ।

  • ਥ੍ਰੈੱਡ-ਸੁਰੱਖਿਅਤ ਸ਼ੁਰੂਆਤ: C++ ਸਟੈਂਡਰਡ ਦੁਆਰਾ ਗਾਰੰਟੀਸ਼ੁਦਾ, ਰਚਨਾ ਦੇ ਸਮੇਂ ਨਸਲ ਦੀਆਂ ਸਥਿਤੀਆਂ ਨੂੰ ਖਤਮ ਕਰਨਾ।
  • Lazy Instantiation: ਉਦਾਹਰਨ ਉਦੋਂ ਹੀ ਬਣਾਈ ਜਾਂਦੀ ਹੈ ਜਦੋਂ ਪਹਿਲੀ ਵਾਰ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਸਰੋਤ ਬਚਾਉਂਦੇ ਹੋਏ।
  • ਘੱਟੋ-ਘੱਟ ਰਨਟਾਈਮ ਓਵਰਹੈੱਡ: ਸ਼ੁਰੂਆਤੀ ਹੋਣ ਤੋਂ ਬਾਅਦ, ਉਦਾਹਰਨ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਲਾਗਤ ਬਹੁਤ ਘੱਟ ਹੈ।
  • ਸਾਦਗੀ: ਕੋਡ ਸਾਫ਼ ਹੈ, ਸਮਝਣ ਵਿੱਚ ਆਸਾਨ ਹੈ, ਅਤੇ ਗਲਤ ਹੋਣਾ ਮੁਸ਼ਕਲ ਹੈ।

ਸੁਰੱਖਿਆ, ਕੁਸ਼ਲਤਾ ਅਤੇ ਸਰਲਤਾ ਦਾ ਇਹ ਸੰਤੁਲਨ ਜ਼ਿਆਦਾਤਰ ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ ਸੋਨੇ ਦਾ ਮਿਆਰ ਹੈ। ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਇੱਕ ਕੋਰ ਮੋਡੀਊਲ, ਮੇਵੇਜ਼ OS ਦੇ ਅੰਦਰ ਇੱਕ ਸੇਵਾ ਵਾਂਗ, ਭਰੋਸੇਮੰਦ ਢੰਗ ਨਾਲ ਤਤਕਾਲ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨ ਦੇ ਜੀਵਨ ਚੱਕਰ ਵਿੱਚ ਵਧੀਆ ਪ੍ਰਦਰਸ਼ਨ ਕਰਦਾ ਹੈ।

ਜਦੋਂ ਪ੍ਰਦਰਸ਼ਨ ਸਰਵੋਤਮ ਹੁੰਦਾ ਹੈ: ਮੇਅਰਸ ਸਿੰਗਲਟਨ

"ਮੈਜਿਕ ਸਟੈਟਿਕ" ਪੈਟਰਨ ਦਾ ਇੱਕ ਖਾਸ ਅਮਲ ਇੰਨਾ ਸ਼ਾਨਦਾਰ ਅਤੇ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਹੈ ਕਿ ਇਸਦਾ ਨਾਮ ਇਸਦੇ ਚੈਂਪੀਅਨ, ਸਕੌਟ ਮੇਅਰਜ਼ ਦੇ ਨਾਮ 'ਤੇ ਰੱਖਿਆ ਗਿਆ ਹੈ। ਮੇਅਰਸ ਸਿੰਗਲਟਨ ਨੂੰ ਅਕਸਰ ਆਧੁਨਿਕ C++ ਲਈ ਸਰਵੋਤਮ ਆਮ-ਉਦੇਸ਼ ਪ੍ਰਦਰਸ਼ਨ ਹੱਲ ਮੰਨਿਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਕਮਾਲ ਦਾ ਸੰਖੇਪ ਹੈ:

"ਮੇਅਰਸ ਸਿੰਗਲਟਨ ਸ਼ਾਇਦ C++ ਵਿੱਚ ਸਿੰਗਲਟਨ ਨੂੰ ਲਾਗੂ ਕਰਨ ਦਾ ਸਭ ਤੋਂ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਤਰੀਕਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਕੰਪਾਈਲਰ ਦੇ ਥ੍ਰੈਡ-ਸੁਰੱਖਿਅਤ ਸਥਿਰ ਸ਼ੁਰੂਆਤੀਕਰਣ ਦਾ ਲਾਭ ਉਠਾਉਂਦਾ ਹੈ, ਪਹਿਲੀ ਕਾਲ ਤੋਂ ਬਾਅਦ ਸਰਵੋਤਮ ਪ੍ਰਦਰਸ਼ਨ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।"

ਇਹ ਪੈਟਰਨ ਸਿੰਗਲਟਨਾਂ ਲਈ ਆਦਰਸ਼ ਹੈ ਜਿਨ੍ਹਾਂ ਨੂੰ ਸਟਾਰਟਅੱਪ ਤੋਂ ਬਾਅਦ ਅਕਸਰ ਐਕਸੈਸ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਇਸ ਦੀਆਂ ਕਾਰਗੁਜ਼ਾਰੀ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਮੇਵੇਜ਼ ਵਰਗੇ ਸਿਸਟਮ ਦੀਆਂ ਲੋੜਾਂ ਨਾਲ ਮੇਲ ਖਾਂਦੀਆਂ ਹਨ, ਜਿੱਥੇ ਮੁੱਖ ਸੇਵਾਵਾਂ ਲੇਟੈਂਸੀ ਨੂੰ ਪੇਸ਼ ਕੀਤੇ ਬਿਨਾਂ ਤੁਰੰਤ ਪਹੁੰਚਯੋਗ ਹੋਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦੇ ਹੋਏ ਕਿ ਵੱਡਾ ਕਾਰੋਬਾਰੀ ਵਰਕਫਲੋ ਸਹਿਜ ਅਤੇ ਜਵਾਬਦੇਹ ਰਹੇ।

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

ਸਿੱਟਾ: ਨੌਕਰੀ ਲਈ ਸਹੀ ਟੂਲ ਚੁਣਨਾ

"ਸਭ ਤੋਂ ਵਧੀਆ" C++ ਸਿੰਗਲਟਨ ਪ੍ਰਦਰਸ਼ਨ ਦੀ ਖੋਜ C++11 ਅਤੇ ਇਸ ਤੋਂ ਬਾਅਦ ਦੇ ਆਧੁਨਿਕ ਪੈਟਰਨਾਂ ਵਿੱਚ ਸਮਾਪਤ ਹੁੰਦੀ ਹੈ। ਜਦੋਂ ਕਿ ਮੇਅਰਸ ਸਿੰਗਲਟਨ ਇੱਕ ਸ਼ਾਨਦਾਰ ਡਿਫੌਲਟ ਵਿਕਲਪ ਹੈ, "ਸਭ ਤੋਂ ਵਧੀਆ" ਪ੍ਰਦਰਸ਼ਨ ਆਖਰਕਾਰ ਤੁਹਾਡੀਆਂ ਖਾਸ ਰੁਕਾਵਟਾਂ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ। ਅਜਿਹੇ ਹਾਲਾਤਾਂ ਲਈ ਜਿੱਥੇ ਪੁਆਇੰਟਰ ਜਾਂਚ ਦੀ ਲਾਗਤ ਵੀ ਬਹੁਤ ਜ਼ਿਆਦਾ ਹੈ, ਗਲੋਬਲ ਨੇਮਸਪੇਸ ਵਿੱਚ ਰੱਖੇ ਗਏ ਇੱਕ ਧਿਆਨ ਨਾਲ ਬਣਾਏ ਸਿੰਗਲਟਨ ਨੂੰ ਮੰਨਿਆ ਜਾ ਸਕਦਾ ਹੈ, ਹਾਲਾਂਕਿ ਇਹ ਆਲਸੀ ਸ਼ੁਰੂਆਤ ਦੀ ਕੁਰਬਾਨੀ ਦਿੰਦਾ ਹੈ। ਕੁੰਜੀ ਵਪਾਰ-ਬੰਦ ਨੂੰ ਸਮਝਣਾ ਹੈ. ਜਿਵੇਂ Mewayz ਮਾਡਿਊਲਰ ਕੰਪੋਨੈਂਟ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ ਜੋ ਤੁਸੀਂ ਅਨੁਕੂਲ ਵਪਾਰਕ ਪ੍ਰਦਰਸ਼ਨ ਲਈ ਕੌਂਫਿਗਰ ਕਰ ਸਕਦੇ ਹੋ, ਸਿੰਗਲਟਨ ਪੈਟਰਨ ਦੀ ਤੁਹਾਡੀ ਚੋਣ ਥ੍ਰੈਡ ਸੁਰੱਖਿਆ, ਸ਼ੁਰੂਆਤੀ ਸਮੇਂ, ਅਤੇ ਐਕਸੈਸ ਬਾਰੰਬਾਰਤਾ ਲਈ ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਦੀਆਂ ਜ਼ਰੂਰਤਾਂ ਦੇ ਅਧਾਰ ਤੇ ਇੱਕ ਜਾਣਬੁੱਝ ਕੇ ਫੈਸਲਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ਇੱਕ ਆਧੁਨਿਕ, ਕੰਪਾਈਲਰ-ਇਨਫੋਰਸਡ ਲਾਗੂਕਰਨ ਦੀ ਚੋਣ ਕਰਕੇ, ਤੁਸੀਂ ਇੱਕ ਬੁਨਿਆਦ ਬਣਾਉਂਦੇ ਹੋ ਜੋ ਤੁਹਾਡੇ ਦੁਆਰਾ ਬਣਾਏ ਜਾਣ ਵਾਲੇ ਸਿਸਟਮਾਂ ਵਾਂਗ ਮਜ਼ਬੂਤ ਅਤੇ ਉੱਚ-ਪ੍ਰਦਰਸ਼ਨ ਕਰਨ ਵਾਲੀ ਹੋਵੇ।

ਅਕਸਰ ਪੁੱਛੇ ਜਾਣ ਵਾਲੇ ਸਵਾਲ

ਸੰਪੂਰਨ ਸਿੰਗਲਟਨ ਦਾ ਪਿੱਛਾ: ਇੱਕ ਸਥਾਈ C++ ਚੁਣੌਤੀ

ਸਾਫਟਵੇਅਰ ਡਿਜ਼ਾਈਨ ਪੈਟਰਨਾਂ ਦੇ ਵਿਸ਼ਾਲ ਲੈਂਡਸਕੇਪ ਵਿੱਚ, ਕੁਝ ਲੋਕਾਂ ਨੇ ਸਿੰਗਲਟਨ ਵਾਂਗ ਬਹਿਸ, ਨਵੀਨਤਾ, ਅਤੇ ਇੱਥੋਂ ਤੱਕ ਕਿ ਵਿਵਾਦ ਵੀ ਛੇੜਿਆ ਹੈ। ਇਸਦਾ ਟੀਚਾ ਧੋਖੇ ਨਾਲ ਸਧਾਰਨ ਹੈ: ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਇੱਕ ਕਲਾਸ ਵਿੱਚ ਸਿਰਫ ਇੱਕ ਉਦਾਹਰਣ ਹੈ ਅਤੇ ਇਸ ਤੱਕ ਪਹੁੰਚ ਦਾ ਇੱਕ ਗਲੋਬਲ ਪੁਆਇੰਟ ਪ੍ਰਦਾਨ ਕਰੋ। ਕੌਂਫਿਗਰੇਸ਼ਨ ਸੈਟਿੰਗਾਂ ਦੇ ਪ੍ਰਬੰਧਨ ਤੋਂ ਲੈ ਕੇ ਇੱਕ ਸਾਂਝਾ ਸਰੋਤ ਜਿਵੇਂ ਕਿ ਇੱਕ ਡੇਟਾਬੇਸ ਕਨੈਕਸ਼ਨ ਪੂਲ ਤੱਕ ਪਹੁੰਚ ਨੂੰ ਨਿਯੰਤਰਿਤ ਕਰਨ ਤੱਕ, ਸਿੰਗਲਟਨ ਪੈਟਰਨ ਇੱਕ ਆਮ ਲੋੜ ਨੂੰ ਸੰਬੋਧਿਤ ਕਰਦਾ ਹੈ। ਹਾਲਾਂਕਿ, C++ ਵਿੱਚ, ਇੱਕ ਸਿੰਗਲਟਨ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨਾ ਜੋ ਥਰਿੱਡ-ਸੁਰੱਖਿਅਤ, ਕੁਸ਼ਲ, ਅਤੇ ਸੂਖਮ ਕਮੀਆਂ ਤੋਂ ਮੁਕਤ ਹੈ, ਭਾਸ਼ਾ ਦੇ ਵਿਕਾਸ ਦੁਆਰਾ ਇੱਕ ਯਾਤਰਾ ਹੈ। ਇਹ ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਭਰੋਸੇਯੋਗਤਾ ਦੀ ਖੋਜ ਹੈ ਜੋ ਮੇਵੇਜ਼ ਵਰਗੇ ਪਲੇਟਫਾਰਮਾਂ ਦੇ ਪਿੱਛੇ ਫਲਸਫੇ ਨੂੰ ਦਰਸਾਉਂਦੀ ਹੈ, ਜਿੱਥੇ ਇੱਕ ਸਥਿਰ ਵਪਾਰਕ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਬਣਾਉਣ ਲਈ ਮਜ਼ਬੂਤ, ਕੁਸ਼ਲ ਮਾਡਿਊਲਰ ਹਿੱਸੇ ਜ਼ਰੂਰੀ ਹਨ। "ਸਭ ਤੋਂ ਵਧੀਆ" ਲਾਗੂ ਕਰਨਾ ਇੱਕ ਇੱਕਲਾ ਜਵਾਬ ਨਹੀਂ ਹੈ ਪਰ ਤੁਹਾਡੇ ਪ੍ਰੋਜੈਕਟ ਦੇ ਸੰਦਰਭ ਲਈ ਖਾਸ ਲੋੜਾਂ ਦਾ ਸੰਤੁਲਨ ਹੈ।

ਭੋਲੀ ਸ਼ੁਰੂਆਤ ਅਤੇ ਮਲਟੀ-ਥ੍ਰੈਡਿੰਗ ਦੇ ਖਤਰੇ

ਸਭ ਤੋਂ ਸਿੱਧਾ ਸਿੰਗਲਟਨ ਲਾਗੂਕਰਨ ਇੱਕ ਸਥਿਰ ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ ਜੋ ਪਹਿਲੀ ਕਾਲ 'ਤੇ ਉਦਾਹਰਨ ਬਣਾਉਂਦਾ ਹੈ। ਹਾਲਾਂਕਿ, ਇਹ ਕਲਾਸਿਕ ਪਹੁੰਚ ਇੱਕ ਬਹੁ-ਥਰਿੱਡਡ ਸੰਸਾਰ ਵਿੱਚ ਇੱਕ ਨਾਜ਼ੁਕ ਨੁਕਸ ਹੈ। ਜੇਕਰ ਇੱਕ ਤੋਂ ਵੱਧ ਥ੍ਰੈੱਡ ਇੱਕੋ ਸਮੇਂ ਇਹ ਜਾਂਚ ਕਰਦੇ ਹਨ ਕਿ ਕੀ ਉਦਾਹਰਨ ਮੌਜੂਦ ਹੈ, ਤਾਂ ਉਹ ਸਾਰੇ ਇਸਨੂੰ ਰੱਦ ਕਰ ਸਕਦੇ ਹਨ ਅਤੇ ਆਪਣੇ ਖੁਦ ਦੇ ਉਦਾਹਰਨਾਂ ਬਣਾਉਣ ਲਈ ਅੱਗੇ ਵਧ ਸਕਦੇ ਹਨ, ਜਿਸ ਨਾਲ ਪੈਟਰਨ ਦੇ ਮੂਲ ਸਿਧਾਂਤ ਦੀ ਸਪੱਸ਼ਟ ਉਲੰਘਣਾ ਹੁੰਦੀ ਹੈ। ਜਦੋਂ ਕਿ ਰਚਨਾ ਦੇ ਤਰਕ ਦੇ ਆਲੇ ਦੁਆਲੇ ਇੱਕ ਮਿਊਟੇਕਸ ਲੌਕ ਜੋੜਨਾ ਡਾਟਾ ਰੇਸ ਨੂੰ ਹੱਲ ਕਰਦਾ ਹੈ, ਇਹ ਇੱਕ ਮਹੱਤਵਪੂਰਨ ਪ੍ਰਦਰਸ਼ਨ ਦੀ ਰੁਕਾਵਟ ਪੇਸ਼ ਕਰਦਾ ਹੈ। ਇੰਸਟੈਂਸ-ਗੈਟਰ ਨੂੰ ਹਰ ਕਾਲ, ਭਾਵੇਂ ਸਿੰਗਲਟਨ ਦੇ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸ਼ੁਰੂ ਹੋਣ ਤੋਂ ਬਾਅਦ, ਲਾਕ ਕਰਨ ਅਤੇ ਅਨਲੌਕ ਕਰਨ ਦਾ ਓਵਰਹੈੱਡ ਹੁੰਦਾ ਹੈ, ਜੋ ਕਿ ਬੇਲੋੜਾ ਅਤੇ ਮਹਿੰਗਾ ਹੁੰਦਾ ਹੈ। ਇਹ ਇੱਕ ਕਾਰੋਬਾਰੀ ਪ੍ਰਕਿਰਿਆ ਬਣਾਉਣ ਦੇ ਸਮਾਨ ਹੈ ਜਿੱਥੇ ਦਰਵਾਜ਼ੇ ਨੂੰ ਸਥਾਈ ਤੌਰ 'ਤੇ ਅਨਲੌਕ ਕੀਤੇ ਜਾਣ ਤੋਂ ਬਾਅਦ ਹਰ ਕਰਮਚਾਰੀ ਨੂੰ ਕਮਰੇ ਦੀ ਚਾਬੀ ਲਈ ਬੇਨਤੀ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ - ਸਮੇਂ ਅਤੇ ਸਰੋਤਾਂ ਦੀ ਬਰਬਾਦੀ। ਮੇਵੇਜ਼ ਵਰਗੇ ਉੱਚ-ਪ੍ਰਦਰਸ਼ਨ ਵਾਲੇ ਮਾਡਯੂਲਰ ਸਿਸਟਮ ਵਿੱਚ, ਕੋਰ ਪੱਧਰ 'ਤੇ ਅਜਿਹੀ ਅਕੁਸ਼ਲਤਾ ਅਸਵੀਕਾਰਨਯੋਗ ਹੋਵੇਗੀ।

ਆਧੁਨਿਕ C++ ਹੱਲ: `std::call_once` ਅਤੇ The Magic Statics

C++ 11 ਸਟੈਂਡਰਡ ਨੇ ਸ਼ਕਤੀਸ਼ਾਲੀ ਟੂਲ ਲਿਆਂਦੇ ਜਿਨ੍ਹਾਂ ਨੇ ਸਿੰਗਲਟਨ ਲਾਗੂਕਰਨ ਨੂੰ ਨਾਟਕੀ ਢੰਗ ਨਾਲ ਸੁਧਾਰਿਆ। ਅੱਜ ਸਭ ਤੋਂ ਮਜ਼ਬੂਤ ​​ਅਤੇ ਵਿਆਪਕ ਤੌਰ 'ਤੇ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਗਈ ਵਿਧੀ "ਮੈਜਿਕ ਸਟੈਟਿਕ" ਵਿਸ਼ੇਸ਼ਤਾ ਦਾ ਲਾਭ ਉਠਾਉਂਦੀ ਹੈ। ਸਿੰਗਲਟਨ ਉਦਾਹਰਨ ਨੂੰ ਫੰਕਸ਼ਨ ਦੇ ਅੰਦਰ ਇੱਕ ਸਥਿਰ ਵੇਰੀਏਬਲ ਦੇ ਰੂਪ ਵਿੱਚ ਘੋਸ਼ਿਤ ਕਰਕੇ (ਇੱਕ ਕਲਾਸ ਸਟੈਟਿਕ ਦੀ ਬਜਾਏ), ਅਸੀਂ ਭਾਸ਼ਾ ਦੀ ਗਾਰੰਟੀ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਾਂ ਕਿ ਸਥਿਰ ਵੇਰੀਏਬਲ ਇੱਕ ਥਰਿੱਡ-ਸੁਰੱਖਿਅਤ ਤਰੀਕੇ ਨਾਲ ਸ਼ੁਰੂ ਕੀਤੇ ਗਏ ਹਨ। ਕੰਪਾਈਲਰ ਹੁੱਡ ਦੇ ਹੇਠਾਂ ਲੋੜੀਂਦੇ ਲਾਕ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ, ਪਰ ਸਿਰਫ ਸ਼ੁਰੂਆਤੀ ਸ਼ੁਰੂਆਤ ਦੇ ਦੌਰਾਨ. ਅਗਲੀਆਂ ਕਾਲਾਂ ਇੱਕ ਸਧਾਰਨ ਪੁਆਇੰਟਰ ਜਾਂਚ ਵਾਂਗ ਤੇਜ਼ ਹਨ। ਇਹ ਪਹੁੰਚ, ਅਕਸਰ ਸਪਸ਼ਟ ਨਿਯੰਤਰਣ ਲਈ `std::call_once` ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਲਾਗੂ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਆਲਸੀ ਸ਼ੁਰੂਆਤ ਅਤੇ ਉੱਚ ਪ੍ਰਦਰਸ਼ਨ ਦੋਵੇਂ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ।

ਜਦੋਂ ਪ੍ਰਦਰਸ਼ਨ ਸਰਵੋਤਮ ਹੁੰਦਾ ਹੈ: ਮੇਅਰਸ ਸਿੰਗਲਟਨ

"ਮੈਜਿਕ ਸਟੈਟਿਕ" ਪੈਟਰਨ ਦਾ ਇੱਕ ਖਾਸ ਅਮਲ ਇੰਨਾ ਸ਼ਾਨਦਾਰ ਅਤੇ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਹੈ ਕਿ ਇਸਦਾ ਨਾਮ ਇਸਦੇ ਚੈਂਪੀਅਨ, ਸਕੌਟ ਮੇਅਰਜ਼ ਦੇ ਨਾਮ 'ਤੇ ਰੱਖਿਆ ਗਿਆ ਹੈ। ਮੇਅਰਸ ਸਿੰਗਲਟਨ ਨੂੰ ਅਕਸਰ ਆਧੁਨਿਕ C++ ਲਈ ਸਰਵੋਤਮ ਆਮ-ਉਦੇਸ਼ ਪ੍ਰਦਰਸ਼ਨ ਹੱਲ ਮੰਨਿਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਕਮਾਲ ਦਾ ਸੰਖੇਪ ਹੈ:

ਸਿੱਟਾ: ਨੌਕਰੀ ਲਈ ਸਹੀ ਟੂਲ ਚੁਣਨਾ

"ਸਭ ਤੋਂ ਵਧੀਆ" C++ ਸਿੰਗਲਟਨ ਪ੍ਰਦਰਸ਼ਨ ਦੀ ਖੋਜ C++11 ਅਤੇ ਇਸ ਤੋਂ ਬਾਅਦ ਦੇ ਆਧੁਨਿਕ ਪੈਟਰਨਾਂ ਵਿੱਚ ਸਮਾਪਤ ਹੁੰਦੀ ਹੈ। ਜਦੋਂ ਕਿ ਮੇਅਰਸ ਸਿੰਗਲਟਨ ਇੱਕ ਸ਼ਾਨਦਾਰ ਡਿਫੌਲਟ ਵਿਕਲਪ ਹੈ, "ਸਭ ਤੋਂ ਵਧੀਆ" ਪ੍ਰਦਰਸ਼ਨ ਆਖਰਕਾਰ ਤੁਹਾਡੀਆਂ ਖਾਸ ਰੁਕਾਵਟਾਂ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ। ਅਜਿਹੇ ਹਾਲਾਤਾਂ ਲਈ ਜਿੱਥੇ ਪੁਆਇੰਟਰ ਜਾਂਚ ਦੀ ਲਾਗਤ ਵੀ ਬਹੁਤ ਜ਼ਿਆਦਾ ਹੈ, ਗਲੋਬਲ ਨੇਮਸਪੇਸ ਵਿੱਚ ਰੱਖੇ ਗਏ ਇੱਕ ਧਿਆਨ ਨਾਲ ਬਣਾਏ ਸਿੰਗਲਟਨ ਨੂੰ ਮੰਨਿਆ ਜਾ ਸਕਦਾ ਹੈ, ਹਾਲਾਂਕਿ ਇਹ ਆਲਸੀ ਸ਼ੁਰੂਆਤ ਦੀ ਕੁਰਬਾਨੀ ਦਿੰਦਾ ਹੈ। ਕੁੰਜੀ ਵਪਾਰ-ਬੰਦ ਨੂੰ ਸਮਝਣਾ ਹੈ. ਜਿਵੇਂ Mewayz ਮਾਡਿਊਲਰ ਕੰਪੋਨੈਂਟ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ ਜੋ ਤੁਸੀਂ ਅਨੁਕੂਲ ਵਪਾਰਕ ਪ੍ਰਦਰਸ਼ਨ ਲਈ ਕੌਂਫਿਗਰ ਕਰ ਸਕਦੇ ਹੋ, ਸਿੰਗਲਟਨ ਪੈਟਰਨ ਦੀ ਤੁਹਾਡੀ ਚੋਣ ਥ੍ਰੈਡ ਸੁਰੱਖਿਆ, ਸ਼ੁਰੂਆਤੀ ਸਮੇਂ, ਅਤੇ ਐਕਸੈਸ ਬਾਰੰਬਾਰਤਾ ਲਈ ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਦੀਆਂ ਜ਼ਰੂਰਤਾਂ ਦੇ ਅਧਾਰ ਤੇ ਇੱਕ ਜਾਣਬੁੱਝ ਕੇ ਫੈਸਲਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ਇੱਕ ਆਧੁਨਿਕ, ਕੰਪਾਈਲਰ-ਇਨਫੋਰਸਡ ਲਾਗੂਕਰਨ ਦੀ ਚੋਣ ਕਰਕੇ, ਤੁਸੀਂ ਇੱਕ ਬੁਨਿਆਦ ਬਣਾਉਂਦੇ ਹੋ ਜੋ ਤੁਹਾਡੇ ਦੁਆਰਾ ਬਣਾਏ ਜਾਣ ਵਾਲੇ ਸਿਸਟਮਾਂ ਵਾਂਗ ਮਜ਼ਬੂਤ ਅਤੇ ਉੱਚ-ਪ੍ਰਦਰਸ਼ਨ ਕਰਨ ਵਾਲੀ ਹੋਵੇ।

ਅੱਜ ਹੀ ਆਪਣਾ ਕਾਰੋਬਾਰ OS ਬਣਾਓ

ਫ੍ਰੀਲਾਂਸਰਾਂ ਤੋਂ ਲੈ ਕੇ ਏਜੰਸੀਆਂ ਤੱਕ, Mewayz 208 ਏਕੀਕ੍ਰਿਤ ਮੌਡਿਊਲਾਂ ਦੇ ਨਾਲ 138,000+ ਕਾਰੋਬਾਰਾਂ ਨੂੰ ਸ਼ਕਤੀ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। ਮੁਫ਼ਤ ਸ਼ੁਰੂ ਕਰੋ, ਜਦੋਂ ਤੁਸੀਂ ਵੱਡੇ ਹੋਵੋ ਤਾਂ ਅੱਪਗ੍ਰੇਡ ਕਰੋ।

ਮੁਫ਼ਤ ਖਾਤਾ ਬਣਾਓ →

Start managing your business smarter today

Join 6,208+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 6,208+ 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