কম্পিউটার টিউটোরিয়াল

C-এ POSIX সেমাফোর ব্যবহার


সেমাফোর হলো প্রসেস বা থ্রেড সিঙ্ক্রোনাইজেশনের একটি কনসেপ্ট। এখানে আমরা বাস্তব প্রোগ্রামে সেমাফোর কীভাবে ব্যবহার করতে হয় তা দেখব।

লিনাক্স সিস্টেমে POSIX সেমাফোর লাইব্রেরি পাওয়া যায়। এটি ব্যবহার করতে `semaphore.h` লাইব্রেরি ইনক্লুড করতে হয়। কোড কম্পাইল করার সময় নিচের অপশনগুলো ব্যবহার করতে হয়:

gcc program_name.c -lpthread -lrt

লক বা অপেক্ষা করার জন্য `sem_wait()` এবং লক রিলিজ করার জন্য `sem_post()` ব্যবহার করা হয়। সেমাফোর ইনিশিয়ালাইজ করতে `sem_init()` বা ইন্টার-প্রসেস কমিউনিকেশন (IPC) এর জন্য `sem_open()` ব্যবহার করা হয়।

উদাহরণ

#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>

sem_t mutex;

void* thread(void* arg) { // থ্রেডের মত কাজ করার ফাংশন
    sem_wait(&mutex); // অপেক্ষা অবস্থা
    printf("\nEntered into the Critical Section..\n");
    sleep(3); // ক্রিটিক্যাল সেকশন
    printf("\nCompleted...\n"); // ক্রিটিক্যাল সেকশন থেকে বের होना
    sem_post(&mutex);
}

int main() {
    sem_init(&mutex, 0, 1);
    pthread_t th1, th2;
    pthread_create(&th1, NULL, thread, NULL);
    sleep(2);
    pthread_create(&th2, NULL, thread, NULL);
    // মেইন থ্রেডের সাথে থ্রেডগুলো জয়েন করা
    pthread_join(th1, NULL);
    pthread_join(th2, NULL);
    sem_destroy(&mutex);
}

আউটপুট

soumyadeep@soumyadeep-VirtualBox:~/Cpp_progs$ gcc 1270.posix_semaphore.c -lpthread -lrt
1270.posix_semaphore.c:19:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
 main() {
 ^~~~
soumyadeep@soumyadeep-VirtualBox:~/Cpp_progs$ ./a.out
Entered into the Critical Section..
Completed...
Entered into the Critical Section..
Completed...
soumyadeep@soumyadeep-VirtualBox:~/Cpp_progs$
  1. ভয়েসওভার অন্য ভাষায় ব্যবহার করতে চান? এখানে কিভাবে পরিবর্তন করবেন

  2. Tkinter Python-এ Thread ব্যবহার করার পদ্ধতি

  3. গুগল শিটসে গুগল ট্রান্সলেট ব্যবহার করার পদ্ধতি

  4. রুবি থ্রেড মাস্টার করুন: মাল্টিথ্রেডিং-এর একটি বিগিনার-ফ্রেন্ডলি গাইড