Computer >> Máy Tính >  >> Lập trình >> lập trình C

In các số theo thứ tự bằng cách sử dụng đồng bộ hóa luồng trong C Program.

Được đưa ra với các luồng, chương trình phải in luồng dựa trên mức độ ưu tiên của chúng bắt đầu từ 0 đến 10.

Chuỗi là gì?

Thread là một tiến trình nhẹ chạy bên trong một chương trình. Một chương trình đơn giản có thể chứa n số luồng.

Không giống như java, đa luồng không được hỗ trợ bởi các tiêu chuẩn ngôn ngữ, POSIX Threads (Pthreads) là tiêu chuẩn được sử dụng trong đa luồng trong C / C ++. C không chứa bất kỳ hỗ trợ tích hợp nào cho các ứng dụng đa luồng. Thay vào đó, nó hoàn toàn dựa vào hệ điều hành để cung cấp tính năng này.

Nó hoạt động như thế nào trong chương trình của chúng tôi?

Để sử dụng các hàm luồng, chúng tôi sử dụng tệp tiêu đề #include. Tệp tiêu đề này sẽ bao gồm tất cả các chức năng liên quan đến luồng trong chương trình của chúng tôi như pthread_create (), v.v.

Bây giờ nhiệm vụ là đồng bộ hóa n số luồng bằng thư viện chuẩn pthread có mặt với trình biên dịch gcc. Ý tưởng là lấy số lượng chỉ và in 1 ở chỉ đầu tiên, in 2 ở chỉ thứ hai, in 3 ở chỉ thứ ba cho đến sợi thứ 10. Đầu ra sẽ chứa các số từ 1 đến 10 dựa trên mức độ ưu tiên của các luồng.

Thuật toán

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

Ví dụ

#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;
}

Đầu ra

nếu chúng ta chạy chương trình trên thì nó sẽ tạo ra kết quả sau

1 2 3 4 5 6 7 8 9 10