কম্পিউটার

সি প্রোগ্রামে থ্রেড সিঙ্ক্রোনাইজেশন ব্যবহার করে ক্রমানুসারে সংখ্যা মুদ্রণ করুন।


থ্রেডের সাথে প্রদত্ত প্রোগ্রামটিকে অবশ্যই তাদের অগ্রাধিকারের ভিত্তিতে থ্রেডটি প্রিন্ট করতে হবে 0 থেকে 10 পর্যন্ত।

থ্রেড কি?

থ্রেড হল লাইটওয়েট প্রক্রিয়া যা একটি প্রোগ্রামের ভিতরে চলে। একটি সাধারণ প্রোগ্রামে n নম্বর থ্রেড থাকতে পারে।

জাভা থেকে ভিন্ন, মাল্টিথ্রেডিং ভাষা মান দ্বারা সমর্থিত নয়, POSIX থ্রেডস (Pthreads) হল C/C++ এ মাল্টিথ্রেডিং-এ ব্যবহৃত স্ট্যান্ডার্ড। C-তে মাল্টিথ্রেডেড অ্যাপ্লিকেশনের জন্য কোনো অন্তর্নির্মিত সমর্থন নেই। পরিবর্তে, এই বৈশিষ্ট্যটি প্রদান করার জন্য এটি সম্পূর্ণরূপে অপারেটিং সিস্টেমের উপর নির্ভর করে৷

এটি আমাদের প্রোগ্রামে কিভাবে কাজ করে?

থ্রেড ফাংশন ব্যবহার করতে আমরা হেডার ফাইল #include ব্যবহার করি। এই হেডার ফাইলটি আমাদের প্রোগ্রামের থ্রেড সম্পর্কিত সমস্ত ফাংশন যেমন pthread_create(), ইত্যাদি অন্তর্ভুক্ত করবে।

এখন কাজ হল gcc কম্পাইলারের সাথে উপস্থিত pthread স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করে n নম্বর থ্রেড সিঙ্ক্রোনাইজ করা। ধারণাটি হল থ্রেড গণনা নিন এবং প্রথম থ্রেডে 1 প্রিন্ট করুন, দ্বিতীয় থ্রেডে 2 প্রিন্ট করুন, 10 তম থ্রেড পর্যন্ত তৃতীয় থ্রেডে 3 প্রিন্ট করুন। আউটপুটে থ্রেডের অগ্রাধিকারের উপর ভিত্তি করে 1 থেকে 10 পর্যন্ত সংখ্যা থাকবে।

অ্যালগরিদম

Start
Step 1 -> Declare global variables as int MAX=10 and count=1
Step 2 -> declare variable thr of pthread_mutex_t and cond of pthread_cond_t
Step 3 -> Declare Function void *even(void *arg)
   Loop While(count < MAX)
      Call pthread_mutex_lock(&thr)
      Loop While(count % 2 != 0)
         Call pthread_cond_wait(&cond, &thr)
      End
      Print count++
      Call pthread_mutex_unlock(&thr)
      Call pthread_cond_signal(&cond)
   End
   Call pthread_exit(0)
Step 4 -> Declare Function void *odd(void *arg)
   Loop While(count < MAX)
      Call pthread_mutex_lock(&thr)
      Loop While(count % 2 != 1)
         Call pthread_cond_wait(&cond, &thr)
      End
      Print count++
      Call pthread_mutex_unlock(&thr)
      Call pthread_cond_signal(&cond)
   End
   Set pthread_exit(0)
Step 5 -> In main()
   Create pthread_t thread1 and pthread_t thread2
   Call pthread_mutex_init(&thr, 0)
   Call pthread_cond_init(&cond, 0)
   Call pthread_create(&thread1, 0, &even, NULL)
   Call pthread_create(&thread2, 0, &odd, NULL)
   Call pthread_join(thread1, 0)
   Call pthread_join(thread2, 0)
   Call pthread_mutex_destroy(&thr)
   Call pthread_cond_destroy(&cond)
Stop

উদাহরণ

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
int MAX = 10;
int count = 1;
pthread_mutex_t thr;
pthread_cond_t cond;
void *even(void *arg){
   while(count < MAX) {
      pthread_mutex_lock(&thr);
      while(count % 2 != 0) {
         pthread_cond_wait(&cond, &thr);
      }
      printf("%d ", count++);
      pthread_mutex_unlock(&thr);
      pthread_cond_signal(&cond);
   }
   pthread_exit(0);
}
void *odd(void *arg){
   while(count < MAX) {
      pthread_mutex_lock(&thr);
      while(count % 2 != 1) {
         pthread_cond_wait(&cond, &thr);
      }
      printf("%d ", count++);
      pthread_mutex_unlock(&thr);
      pthread_cond_signal(&cond);
   }
   pthread_exit(0);
}
int main(){
   pthread_t thread1;
   pthread_t thread2;
   pthread_mutex_init(&thr, 0);
   pthread_cond_init(&cond, 0);
   pthread_create(&thread1, 0, &even, NULL);
   pthread_create(&thread2, 0, &odd, NULL);
   pthread_join(thread1, 0);
   pthread_join(thread2, 0);
   pthread_mutex_destroy(&thr);
   pthread_cond_destroy(&cond);
   return 0;
}

আউটপুট

যদি আমরা উপরের প্রোগ্রামটি চালাই তবে এটি নিম্নলিখিত আউটপুট তৈরি করবে

1 2 3 4 5 6 7 8 9 10

  1. C-তে Nth টার্ম পর্যন্ত পেন্টাটোপ সংখ্যা মুদ্রণের প্রোগ্রাম

  2. সি তে কলাম অনুসারে সংখ্যা মুদ্রণের প্রোগ্রাম

  3. C প্রোগ্রামে O(1) অতিরিক্ত স্থান ব্যবহার করে n x n স্পাইরাল ম্যাট্রিক্স প্রিন্ট করুন।

  4. সি প্রোগ্রামে ম্যাট্রিক্স তির্যক প্যাটার্নে সংখ্যা মুদ্রণ করুন।