Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menggunakan program C untuk penyegerakan benang untuk mencetak nombor dalam urutan

Menggunakan program C untuk penyegerakan benang untuk mencetak nombor dalam urutan

王林
王林ke hadapan
2023-08-26 22:45:061327semak imbas

Menggunakan program C untuk penyegerakan benang untuk mencetak nombor dalam urutan

Memandangkan benang, program mesti mencetak benang dari 0 hingga 10 mengikut keutamaannya.

Apakah benang?

Benang ialah proses ringan yang berjalan di dalam program. Program mudah boleh mengandungi n benang.

Tidak seperti Java, piawaian bahasa C/C++ tidak menyokong utas berbilang benang (Pthreads) adalah standard untuk berbilang benang dalam C/C++. Bahasa C tidak mengandungi sebarang sokongan terbina dalam untuk aplikasi berbilang benang, tetapi bergantung sepenuhnya pada sistem pengendalian untuk menyediakan fungsi ini.

Bagaimana ia berfungsi dalam program kami?

Untuk menggunakan fungsi benang, kami menggunakan fail pengepala #include. Fail pengepala ini akan mengandungi semua fungsi berkaitan benang dalam program kami, seperti pthread_create(), dsb.

Tugas semasa ialah menggunakan perpustakaan standard pthread yang disediakan oleh pengkompil gcc untuk menyegerakkan n benang. Ideanya adalah untuk mendapatkan kiraan benang dan mencetak 1 dalam benang pertama, 2 dalam benang kedua, 3 dalam benang ketiga, sehingga benang kesepuluh. Output akan mengandungi nombor dari 1 hingga 10 berdasarkan keutamaan benang. Terjemahan bahasa Cina bagi

Algoritma

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

Contoh

ialah:

Contoh

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

Output

Jika kita menjalankan program di atas, ia akan menghasilkan output berikut

1 2 3 4 5 6 7 8 9 10

Atas ialah kandungan terperinci Menggunakan program C untuk penyegerakan benang untuk mencetak nombor dalam urutan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam