কনকারেন্ট প্রোগ্রামিং (Concurrent Programming) হলো একাধিক কাজ বা প্রোগ্রাম অংশকে সমান্তরালভাবে (simultaneously) বা পাশাপাশি চালানোর কৌশল। এটি মাল্টি-থ্রেডিং, মাল্টি-প্রসেসিং এবং প্যারালাল প্রোগ্রামিংয়ের অন্তর্গত, যেখানে একাধিক কার্যক্রম একে অপরের সাথে সমান্তরালে (বা কিছু ক্ষেত্রে, একে অপরের সাথে মিশ্রিতভাবে) চলে। C প্রোগ্রামিং ভাষায় কনকারেন্ট প্রোগ্রামিংয়ের জন্য বেশ কিছু পদ্ধতি এবং লাইব্রেরি রয়েছে।
এখানে C তে কনকারেন্ট প্রোগ্রামিং প্রযুক্তি এবং তাদের ব্যবহার নিয়ে আলোচনা করা হবে।
মাল্টি-থ্রেডিং হলো একটাই প্রোগ্রাম বা প্রসেসের মধ্যে একাধিক থ্রেড তৈরি করা, যেখানে প্রতিটি থ্রেড একটি পৃথক কার্য সম্পাদন করে। C তে মাল্টি-থ্রেডিং সাধারণত pthread
লাইব্রেরি ব্যবহার করে পরিচালিত হয়। থ্রেডগুলি একে অপরের সাথে সমান্তরালভাবে কাজ করতে পারে, যা প্রোগ্রামের কর্মক্ষমতা এবং পারফরম্যান্স বাড়ায়।
pthread
লাইব্রেরি:pthread
(POSIX threads) হলো C এর জন্য একটি স্ট্যান্ডার্ড থ্রেড লাইব্রেরি, যা মাল্টি-থ্রেডিং পরিচালনার জন্য ব্যবহৃত হয়।
pthread_create()
: নতুন থ্রেড তৈরি করা।pthread_join()
: থ্রেডের কার্যক্রম সম্পূর্ণ হওয়া পর্যন্ত অপেক্ষা করা।pthread_exit()
: থ্রেডের কার্যক্রম শেষ হওয়া।#include <stdio.h>
#include <pthread.h>
// থ্রেডের কাজ
void* print_message(void* ptr) {
printf("Hello from thread!\n");
return NULL;
}
int main() {
pthread_t thread1, thread2;
// প্রথম থ্রেড তৈরি
pthread_create(&thread1, NULL, print_message, NULL);
// দ্বিতীয় থ্রেড তৈরি
pthread_create(&thread2, NULL, print_message, NULL);
// থ্রেডের কাজ শেষ হওয়া পর্যন্ত অপেক্ষা করা
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
printf("Hello from main thread!\n");
return 0;
}
এখানে দুটি থ্রেড তৈরি করা হয়েছে, এবং প্রতিটি থ্রেড "Hello from thread!" মেসেজ প্রিন্ট করবে।
শেয়ারড মেমরি হলো একাধিক প্রসেসের মধ্যে একে অপরের ডেটা শেয়ার করার পদ্ধতি। C তে শেয়ারড মেমরি ব্যবহারের জন্য shmget()
, shmat()
, shmdt()
, এবং shmctl()
ফাংশনগুলি ব্যবহার করা হয়।
shmget()
: শেয়ারড মেমরি তৈরি বা পাওয়ার জন্য ব্যবহৃত হয়।shmat()
: শেয়ারড মেমরিতে অ্যাক্সেস করার জন্য ব্যবহৃত হয়।shmdt()
: শেয়ারড মেমরি আনম্যাপ করার জন্য ব্যবহৃত হয়।#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int main() {
key_t key = ftok("shmfile", 65);
int shmid = shmget(key, 1024, 0666|IPC_CREAT);
char *str = (char*) shmat(shmid, NULL, 0);
printf("Write data to shared memory: ");
gets(str); // ইউজার ইনপুট নেয়া
printf("Data written to shared memory: %s\n", str);
shmdt(str); // শেয়ারড মেমরি ডিসঅ্যাসোসিয়েট করা
return 0;
}
এই উদাহরণে, একটি প্রসেস শেয়ারড মেমরিতে ডেটা লেখে এবং অন্য প্রসেস সেই ডেটা পড়ে।
মেসেজ কিউ ব্যবহৃত হয় একাধিক প্রসেসের মধ্যে ডেটা আদান-প্রদান করার জন্য। C তে মেসেজ কিউ পরিচালনা করতে msgget()
, msgsnd()
, msgrcv()
, এবং msgctl()
ফাংশনগুলি ব্যবহৃত হয়।
msgget()
: একটি নতুন মেসেজ কিউ তৈরি বা খোঁজার জন্য ব্যবহৃত হয়।msgsnd()
: কিউতে একটি মেসেজ পাঠানোর জন্য ব্যবহৃত হয়।msgrcv()
: কিউ থেকে একটি মেসেজ গ্রহণ করার জন্য ব্যবহৃত হয়।#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct msg_buffer {
long msg_type;
char msg_text[100];
};
int main() {
key_t key = ftok("progfile", 65);
int msgid = msgget(key, 0666 | IPC_CREAT);
struct msg_buffer message;
// মেসেজ পাঠানো
message.msg_type = 1;
printf("Write message: ");
fgets(message.msg_text, sizeof(message.msg_text), stdin);
msgsnd(msgid, &message, sizeof(message), 0);
printf("Message sent: %s", message.msg_text);
// মেসেজ গ্রহণ করা
msgrcv(msgid, &message, sizeof(message), 1, 0);
printf("Message received: %s", message.msg_text);
msgctl(msgid, IPC_RMID, NULL); // মেসেজ কিউ নিষ্ক্রিয় করা
return 0;
}
এখানে, একটি প্রসেস মেসেজ পাঠাচ্ছে এবং অন্য প্রসেস মেসেজ গ্রহণ করছে।
সেমাফোর হলো একটি কনকারেন্ট প্রোগ্রামিং প্রযুক্তি যা একাধিক থ্রেড বা প্রসেসের মধ্যে সিঙ্ক্রোনাইজেশন নিশ্চিত করতে ব্যবহৃত হয়। এটি বিশেষ করে ক্রিটিকাল সেকশন বা একাধিক থ্রেডের মধ্যে ডেটা রেস কন্ডিশন এড়াতে সহায়ক।
C তে সেমাফোর ব্যবহারের জন্য sem_init()
, sem_wait()
, sem_post()
, এবং sem_destroy()
ফাংশনগুলি ব্যবহৃত হয়।
sem_wait()
: সেমাফোরের মান কমায় (যদি মান ইতিবাচক হয়) এবং থ্রেড বা প্রসেসকে ব্লক করে।sem_post()
: সেমাফোরের মান বাড়ায় এবং ব্লক করা থ্রেড বা প্রসেসকে মুক্ত করে।সি প্রোগ্রামিংয়ে কনকারেন্ট প্রোগ্রামিংয়ের কৌশলগুলি ব্যবহার করে বিভিন্ন কার্যক্রম একযোগে সম্পাদন করা যায়, যা প্রোগ্রামের পারফরম্যান্স এবং কার্যকারিতা উন্নত করতে সহায়ক।
common.read_more