std::unique_lock बनाम std::lock_guard: C++ में म्यूटेक्स के लिए क्या चुनें?
नमस्ते! मैंने C++11 में मल्टीथ्रेडिंग सीखना शुरू किया है और std::unique_lock और std::lock_guard के बीच चुनाव में उलझ गया हूँ। दोनों क्लासेस म्यूटेक्स को लॉक करने के लिए उपयोग होते हैं, लेकिन मैं समझ नहीं पा रहा हूँ कि किस स्थिति में किसका उपयोग करना चाहिए।
उदाहरण के लिए, मैं एक सरल थ्रेड-सेफ काउंटर लिख रहा हूँ:
```cpp
#include
#include
#include
std::mutex mtx;
int counter = 0;
void increment() {
for (int i = 0; i < 100000; ++i) {
// यहाँ क्या बेहतर है?
std::lock_guard lock(mtx);
// या
std::unique_lock lock(mtx);
++counter;
}
}
```
दोनों विकल्प कंपाइल होते हैं और काम करते हैं। लेकिन मैंने सुना है कि unique_lock "भारी" है। इसका उपयोग कब करना चाहिए? क्या ऐसी स्थितियाँ हैं जहाँ lock_guard उपयुक्त नहीं है? और क्यों?