Synchronization Techniques (Critical Section, Mutex)

MFC Thread এবং Multithreading Techniques - এমএফসি (MFC) - Microsoft Technologies

319

Multithreading ব্যবহারের সময় একাধিক থ্রেড যখন একই ডেটা বা রিসোর্সে একযোগে অ্যাক্সেস করার চেষ্টা করে, তখন data inconsistency বা race conditions এর মতো সমস্যা তৈরি হতে পারে। এই সমস্যা সমাধানের জন্য synchronization techniques ব্যবহার করা হয়। এগুলির মাধ্যমে নিশ্চিত করা হয় যে, একে অপরের সাথে সংঘর্ষ না হয় এবং ডেটা সঠিকভাবে পরিচালিত হয়।


Critical Section

Critical Section হল এমন একটি ব্লক বা অংশ যেখানে শুধুমাত্র একথেকথ থ্রেড একসাথে প্রবেশ করতে পারে। যখন একথেকথ থ্রেড একটি ক্রিটিক্যাল সেকশনে কাজ করছে, তখন অন্য থ্রেড সেই সময় ওই সেকশনটি অ্যাক্সেস করতে পারে না। এটি মূলত একটি দ্রুত এবং সহজ পদ্ধতি যা মেমরি বা রিসোর্সের অ্যাক্সেস সিঙ্ক্রোনাইজ করতে ব্যবহৃত হয়।

Critical Section এর প্রধান বৈশিষ্ট্য:

  • Fast and Efficient: এটি mutex থেকে দ্রুত এবং হালকা, কারণ এটি প্রক্রিয়ার মধ্যে কেবলমাত্র থ্রেডের ব্লক করার জন্য কিছু মেমরি ব্যবহার করে।
  • Thread-local: এটি শুধু একই প্রসেসের মধ্যে কাজ করে। অর্থাৎ, এটি একাধিক প্রোগ্রাম বা প্রক্রিয়া মধ্যে কাজ করে না, কিন্তু এক প্রক্রিয়ার ভিতর কাজ করতে পারে।
  • Lock: থ্রেড যখন ক্রিটিক্যাল সেকশনে প্রবেশ করে, তখন অন্য কোনো থ্রেড সেই সময় এটি অ্যাক্সেস করতে পারে না।

Code Example (Critical Section):

CCriticalSection criticalSection;

void ThreadFunction()
{
    criticalSection.Lock();  // Lock the critical section
    // সুরক্ষিত কোড ব্লক
    criticalSection.Unlock();  // Unlock the critical section
}

এখানে, CCriticalSection একটি মিউটেক্সের মতো আচরণ করে, তবে এটি শুধুমাত্র একই অ্যাপ্লিকেশনের মধ্যে কাজ করে এবং এর লকিং এবং আনলকিং অপারেশনটি দ্রুত হয়।


Mutex

Mutex (Mutual Exclusion) হল আরেকটি synchronization primitive, যা একাধিক থ্রেডের মধ্যে রিসোর্সের অ্যাক্সেসকে সিঙ্ক্রোনাইজ করতে ব্যবহৃত হয়। Mutex মূলত অনেকটাই Critical Section এর মতো, কিন্তু এর একটি বৈশিষ্ট্য হলো এটি process-level synchronization প্রদান করে। অর্থাৎ, এটি একাধিক প্রোগ্রামের মধ্যে রিসোর্স শেয়ারিং সিঙ্ক্রোনাইজ করতে পারে।

Mutex এর প্রধান বৈশিষ্ট্য:

  • Cross-process Synchronization: এটি একাধিক প্রোগ্রাম বা থ্রেডের মধ্যে synchronization প্রক্রিয়া পরিচালনা করতে পারে।
  • Slower than Critical Section: Mutex এর লক এবং আনলক অপারেশনগুলি তুলনামূলকভাবে ধীর হতে পারে, কারণ এটি সিস্টেম রিসোর্সের উপর নির্ভরশীল।
  • Ownership: Mutex-এর একটি মালিকানা থাকে, অর্থাৎ একটি থ্রেড শুধুমাত্র সেই থ্রেডকে Unlock করতে পারে যা Lock করেছে। এটি Deadlock পরিস্থিতি থেকে রক্ষা করতে সাহায্য করে।

Code Example (Mutex):

CMutex mutex;

void ThreadFunction()
{
    mutex.Lock();  // Lock the mutex
    // সুরক্ষিত কোড ব্লক
    mutex.Unlock();  // Unlock the mutex
}

এখানে, CMutex একটি মিউটেক্স অবজেক্ট তৈরি করে, যা থ্রেডের মধ্যে সিঙ্ক্রোনাইজেশন নিশ্চিত করে।


Critical Section এবং Mutex এর মধ্যে পার্থক্য

  • Scope: Critical Section শুধুমাত্র একই প্রোগ্রামের মধ্যে কাজ করে, কিন্তু Mutex একাধিক প্রোগ্রামের মধ্যে synchronization করতে পারে।
  • Speed: Critical Section সাধারণত দ্রুত এবং কম রিসোর্স ব্যবহার করে, কারণ এটি শুধুমাত্র একক প্রক্রিয়ার মধ্যে কাজ করে। অন্যদিকে, Mutex অনেক বেশি রিসোর্স ব্যবহার করে এবং অপেক্ষা করতে বেশি সময় লাগে।
  • Usage: Critical Section সাধারণত যখন একে অপরের সাথে কেবল একটি থ্রেড একই প্রোগ্রামের মধ্যে কাজ করছে তখন ব্যবহৃত হয়। Mutex ব্যবহার করা হয় যখন একাধিক থ্রেড বা প্রোগ্রাম একসাথে একে অপরের রিসোর্স অ্যাক্সেস করতে পারে।

সারাংশ

Critical Section এবং Mutex হল দুটি প্রধান synchronization primitive, যা multithreading পরিবেশে ডেটা inconsistency বা race conditions প্রতিরোধ করার জন্য ব্যবহৃত হয়। Critical Section দ্রুত এবং একটি প্রক্রিয়ার মধ্যে কার্যকর, যেখানে Mutex একাধিক প্রোগ্রাম বা থ্রেডের মধ্যে synchronization নিশ্চিত করতে পারে। যদিও Critical Section তুলনামূলকভাবে দ্রুত, Mutex আরও ব্যাপক এবং বহুমাত্রিক synchronization সমাধান প্রদান করে।

Content added By
Promotion

Are you sure to start over?

Loading...