পার্থক্যটি হ'ল আপনি লক এবং আনলক করতে পারেন std::unique_lock
। std::lock_guard
শুধুমাত্র নির্মাণের পরে লক হয়ে যাবে এবং ধ্বংসের সময় তালাবদ্ধ হয়ে যাবে।
সুতরাং বি কেস কেস এর জন্য আপনার অবশ্যই std::unique_lock
কন্ডিশন ভেরিয়েবলের প্রয়োজন। এ ক্ষেত্রে এটি নির্ভর করে যে আপনার প্রহরীটিকে পুনরায় স্থানান্তর করতে হবে কিনা।
std::unique_lock
এর অন্যান্য বৈশিষ্ট্য রয়েছে যা এটিকে মঞ্জুরি দেয়: যেমন: তাত্ক্ষণিকভাবে মিটেক্সটি লক না করেই তৈরি করা হবে তবে RAII মোড়ক তৈরি করতে ( এখানে দেখুন )।
std::lock_guard
এছাড়াও একটি সুবিধাজনক RAII মোড়ক সরবরাহ করে তবে একাধিক মিউটেক্স নিরাপদে লক করতে পারে না। এটি যখন আপনার সীমিত সুযোগের জন্য মোড়কের প্রয়োজন হয় তখন এটি ব্যবহার করা যেতে পারে, যেমন: সদস্য ফাংশন:
class MyClass{
std::mutex my_mutex;
void member_foo() {
std::lock_guard<mutex_type> lock(this->my_mutex);
/*
block of code which needs mutual exclusion (e.g. open the same
file in multiple threads).
*/
//mutex is automatically released when lock goes out of scope
};
Chmike দ্বারা কোনও প্রশ্ন পরিষ্কার করতে, ডিফল্টরূপে std::lock_guard
এবং std::unique_lock
একই রকম। সুতরাং উপরে ক্ষেত্রে, আপনি প্রতিস্থাপন করতে পারে std::lock_guard
সঙ্গে std::unique_lock
। তবে, std::unique_lock
একটি বাচ্চা আরও ওভারহেড থাকতে পারে।
নোট করুন যে এই দিনগুলির std::scoped_lock
পরিবর্তে ব্যবহার করা উচিত std::lock_guard
।