পার্থক্যটি হ'ল আপনি লক এবং আনলক করতে পারেন 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।