মাল্টিথ্রেডিং এবং সিঙ্ক্রোনাইজেশন হলো কম্পিউটার প্রোগ্রামিংয়ের গুরুত্বপূর্ণ দুটি ধারণা, যা সমান্তরাল প্রসেসিং এবং ডেটা সুরক্ষা নিশ্চিত করতে ব্যবহৃত হয়। মাল্টিথ্রেডিংয়ের মাধ্যমে একাধিক থ্রেড একই সময়ে কাজ করতে পারে, আর সিঙ্ক্রোনাইজেশন নিশ্চিত করে যে একাধিক থ্রেড নিরাপদভাবে একসাথে কাজ করছে এবং ডেটা সংঘর্ষ এড়াচ্ছে।
মাল্টিথ্রেডিং
মাল্টিথ্রেডিং একটি প্রোগ্রামিং কৌশল যেখানে একাধিক থ্রেড একই প্রোগ্রামে একটি সময়ে কার্যকর হয়। একটি থ্রেড হলো একটি প্রসেসের সবচেয়ে ছোট ইউনিট, যা একসঙ্গে কাজ করার জন্য ব্যবহৃত হয়। মাল্টিথ্রেডিংয়ের মাধ্যমে CPU-এর সম্পদ আরও কার্যকরভাবে ব্যবহার করা যায়।
মাল্টিথ্রেডিংয়ের সুবিধা:
- প্রদর্শন বৃদ্ধি: একাধিক থ্রেড ব্যবহার করে CPU এর সময়কে সঠিকভাবে ব্যবহার করা যায়, যা কর্মক্ষমতা বাড়ায়।
- উত্তরদায়িতা: UI থ্রেড এবং ব্যাকগ্রাউন্ড থ্রেড আলাদা করে ব্যবহার করা যায়, যা অ্যাপ্লিকেশনকে আরও উত্তরদায়ী করে তোলে।
- সম্পদ ভাগাভাগি: থ্রেডগুলি একই প্রক্রিয়ার সম্পদ ব্যবহার করতে পারে, যা মেমোরি ব্যবস্থাপনা সহজ করে।
উদাহরণ:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void* thread_function(void* arg) {
printf("Thread %d is running.\n", *((int*)arg));
return NULL;
}
int main() {
pthread_t threads[5];
int thread_args[5];
for (int i = 0; i < 5; i++) {
thread_args[i] = i + 1;
pthread_create(&threads[i], NULL, thread_function, (void*)&thread_args[i]);
}
for (int i = 0; i < 5; i++) {
pthread_join(threads[i], NULL);
}
return 0;
}
সিঙ্ক্রোনাইজেশন
সিঙ্ক্রোনাইজেশন হলো একটি কৌশল যা মাল্টিথ্রেডেড প্রোগ্রামে ডেটার নিরাপত্তা নিশ্চিত করে। যখন একাধিক থ্রেড একটি অভিন্ন রিসোর্সে (যেমন একটি ভেরিয়েবল বা ডেটা স্ট্রাকচার) কাজ করে, তখন ডেটা সংঘর্ষ এড়ানোর জন্য সিঙ্ক্রোনাইজেশন প্রয়োজন।
সিঙ্ক্রোনাইজেশনের পদ্ধতি:
- মিউটেক্স (Mutex): একটি লক যা নিশ্চিত করে যে এক সময়ে একটি মাত্র থ্রেড একটি নির্দিষ্ট রিসোর্সে প্রবেশ করতে পারে।
- সেমাফোর (Semaphore): একটি গণনা করা লক যা একাধিক থ্রেডকে একটি নির্দিষ্ট সংখ্যক রিসোর্সে প্রবেশ করতে দেয়।
- কন্ডিশন ভেরিয়েবল (Condition Variable): থ্রেডগুলোর মধ্যে সিঙ্ক্রোনাইজেশনের জন্য ব্যবহৃত হয়, যাতে একটি থ্রেড অপেক্ষা করতে পারে অন্য একটি থ্রেডের সিগন্যালের জন্য।
উদাহরণ: মিউটেক্সের ব্যবহার
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_mutex_t lock; // মিউটেক্স লক ডিফাইন করা
int shared_counter = 0; // শেয়ার্ড কাউন্টার
void* thread_function(void* arg) {
pthread_mutex_lock(&lock); // লক নেয়া
for (int i = 0; i < 100000; i++) {
shared_counter++; // শেয়ার্ড কাউন্টার বাড়ানো
}
pthread_mutex_unlock(&lock); // লক মুক্ত করা
return NULL;
}
int main() {
pthread_t threads[10];
pthread_mutex_init(&lock, NULL); // মিউটেক্স ইনিশিয়ালাইজ
for (int i = 0; i < 10; i++) {
pthread_create(&threads[i], NULL, thread_function, NULL);
}
for (int i = 0; i < 10; i++) {
pthread_join(threads[i], NULL);
}
printf("Final counter value: %d\n", shared_counter); // ফাইনাল কাউন্টার মান
pthread_mutex_destroy(&lock); // মিউটেক্স ধ্বংস করা
return 0;
}
সারাংশ
- মাল্টিথ্রেডিং: একাধিক থ্রেডের মাধ্যমে সমান্তরাল কার্য সম্পাদনের কৌশল, যা CPU এর সম্পদের কার্যকর ব্যবহার নিশ্চিত করে।
- সিঙ্ক্রোনাইজেশন: একাধিক থ্রেডের মধ্যে নিরাপদ ডেটা শেয়ারিং নিশ্চিত করতে ব্যবহৃত হয়, যাতে ডেটা সংঘর্ষ এড়ানো যায়।
মাল্টিথ্রেডিং এবং সিঙ্ক্রোনাইজেশন একসাথে কাজ করে সি প্রোগ্রামগুলিতে কার্যকারিতা বৃদ্ধি এবং নিরাপত্তা নিশ্চিত করতে সহায়তা করে।
Read more