semget(), semop(), এবং semctl() ফাংশনগুলি UNIX/Linux সিস্টেমে সেমাফোর ব্যবস্থাপনার জন্য ব্যবহৃত হয়। সেমাফোর একটি Synchronization primitive যা প্রক্রিয়াগুলির মধ্যে সমন্বয় এবং সিঙ্ক্রোনাইজেশন নিশ্চিত করে। নিচে এই তিনটি ফাংশনের বিস্তারিত আলোচনা করা হলো:
১. semget()
সংজ্ঞা:
semget() ফাংশনটি একটি নতুন সেমাফোর সেট তৈরি করে অথবা একটি বিদ্যমান সেমাফোর সেটের আইডি ফেরত দেয়।
সিঙ্ক্রনাইজেশন:
সিনট্যাক্স:
key: সেমাফোর সেটের জন্য একটি কী। এটি সেমাফোরকে চিহ্নিত করতে ব্যবহৃত হয়।nsems: সেমাফোর সেটে সেমাফোরের সংখ্যা।semflg: সেমাফোর সেটের জন্য নির্ধারিত পতাকা। (যেমন IPC_CREAT, IPC_EXCL ইত্যাদি)
int semget(key_t key, int nsems, int semflg);
রিটার্ন ভ্যালু:
- সাফল্যের ক্ষেত্রে সেমাফোর সেটের আইডি।
- ব্যর্থতার ক্ষেত্রে -1 ফেরত দেয় এবং errno সেট করে।
উদাহরণ:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int main() {
key_t key = ftok("file.txt", 65); // create a unique key
int semid = semget(key, 1, 0666 | IPC_CREAT); // create a semaphore set with 1 semaphore
return 0;
}
২. semop()
সংজ্ঞা:
semop() ফাংশনটি সেমাফোর অপারেশন সম্পাদন করে। এটি সেমাফোরের মান বাড়ানো, কমানো বা পরিবর্তন করার জন্য ব্যবহৃত হয়।
সিঙ্ক্রনাইজেশন:
সিনট্যাক্স:
semid: সেমাফোর সেটের আইডি যাsemget()থেকে পাওয়া যায়।sops: সেমাফোর অপারেশনগুলির একটি অ্যারে, যা সেমাফোরের মান পরিবর্তনের নির্দেশনা প্রদান করে।nsops: অপারেশনগুলির সংখ্যা।
int semop(int semid, struct sembuf *sops, size_t nsops);
রিটার্ন ভ্যালু:
- সাফল্যের ক্ষেত্রে 0।
- ব্যর্থতার ক্ষেত্রে -1 ফেরত দেয় এবং errno সেট করে।
উদাহরণ:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int main() {
int semid; // Assume semid is initialized
struct sembuf sop;
sop.sem_num = 0; // index of the semaphore in the set
sop.sem_op = -1; // decrement the semaphore
sop.sem_flg = 0; // operation flag
semop(semid, &sop, 1); // Perform the semaphore operation
return 0;
}
৩. semctl()
সংজ্ঞা:
semctl() ফাংশনটি সেমাফোর সেটের নিয়ন্ত্রণ এবং তথ্য পেতে ব্যবহৃত হয়। এটি বিভিন্ন ধরনের অপারেশন যেমন সেমাফোর সেট করা, মান পড়া ইত্যাদি সম্পাদন করে।
সিঙ্ক্রনাইজেশন:
সিনট্যাক্স:
semid: সেমাফোর সেটের আইডি।semnum: সেমাফোরের ইনডেক্স।cmd: সেমাফোরের সাথে সংশ্লিষ্ট অপারেশন নির্দেশ করে (যেমন GETVAL, SETVAL, IPC_RMID ইত্যাদি)।
int semctl(int semid, int semnum, int cmd, ...);
রিটার্ন ভ্যালু:
- বিভিন্ন অপারেশনের জন্য ভিন্ন ভিন্ন মান ফেরত দেয়, সাধারণত সাফল্যের ক্ষেত্রে 0 অথবা সেমাফোরের মান।
- ব্যর্থতার ক্ষেত্রে -1 ফেরত দেয় এবং errno সেট করে।
উদাহরণ:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int main() {
int semid; // Assume semid is initialized
// Set the value of the semaphore to 1
semctl(semid, 0, SETVAL, 1); // Set the first semaphore's value to 1
// Get the value of the semaphore
int value = semctl(semid, 0, GETVAL);
return 0;
}
উপসংহার
semget(), semop(), এবং semctl() ফাংশনগুলি UNIX/Linux সিস্টেমে সেমাফোর ব্যবস্থাপনার জন্য অপরিহার্য। এগুলি প্রক্রিয়াগুলির মধ্যে সিঙ্ক্রোনাইজেশন এবং সমন্বয় নিশ্চিত করতে সাহায্য করে, বিশেষ করে মাল্টিপ্রসেসিং পরিবেশে। সঠিকভাবে এই ফাংশনগুলি ব্যবহার করলে, সফটওয়্যার সিস্টেমের কার্যকারিতা এবং পারফরম্যান্স উন্নত হয়।