std::unique_lock vs 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 उपयुक्त नहीं है? और क्यों?