Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

Cプログラムのスレッド同期を使用して番号を順番に出力します。


スレッドを指定すると、プログラムは0から10までの優先順位に基づいてスレッドを出力する必要があります。

スレッドとは何ですか?

スレッドは、プログラム内で実行される軽量プロセスです。単純なプログラムには、n個のスレッドを含めることができます。

Javaとは異なり、マルチスレッドは言語標準ではサポートされていません。POSIXスレッド(Pthread)は、C /C++のマルチスレッドで使用される標準です。 Cには、マルチスレッドアプリケーションのサポートが組み込まれていません。代わりに、この機能を提供するためにオペレーティングシステムに完全に依存しています。

プログラムでどのように機能しますか?

スレッド関数を使用するには、ヘッダーファイル#includeを使用します。このヘッダーファイルには、pthread_create()などのプログラム内のスレッドに関連するすべての関数が含まれます。

ここでのタスクは、gccコンパイラに存在するpthread標準ライブラリを使用してn個のスレッドを同期することです。アイデアは、スレッド数を取得して、最初のスレッドで1を印刷し、2番目のスレッドで2を印刷し、10番目のスレッドまで3番目のスレッドで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プログラムでO(1)の余分なスペースを使用して、nxnスパイラル行列を出力します。

    正の整数nが与えられ、時計回りにO(1)の余分なスペースのみを使用して、nxnのスパイラル行列を作成します スパイラル行列は、円の原点から始まり時計回りに回転するスパイラルのように機能する行列です。したがって、タスクは、2→4→6→8→10→12→14→16→18から始まるO(1)スペースを使用して、行列をスパイラル形式で印刷することです。 以下にスパイラル行列の例を示します- 例 Input: 3 Output:    9 8 7    2 1 6    3 4 1 無制限のスペースでコードを解くのは簡単になりますが、最

  2. Cプログラムで行列の対角パターンで数値を印刷します。

    タスクは、対角パターンのnxnの行列を印刷することです。 nが3の場合、対角パターンで行列を印刷するのは-です。 したがって、出力は次のようになります- 例 Input: 3 Output:    1 2 4    3 5 7    6 8 9 Input: 4 Output:    1 2 4  7    3 5 8 11    6 9 12 14    10 13 15 16 この問題は、数値nを与え、n x nの行列を生成