Linuxの下で2つのスレッドを使用して協力して1つのタスクの簡単な実現を完成します


以前のLinuxでのPthreadライブラリの問題を解決したばかりで、今回は2つのスレッドを使用して協力し、合計を求めるタスクを共同で完了します.
基礎を築こう
今回必要な知識は次のとおりです.
  • lpthread、コンパイル時に使用され、宣言の効果
  • に相当します.
  • pthread_mutex_tはロックオブジェクトとして
  • 存在する.
  • pthread_create、新しいスレッドを作成する関数呼び出し
  • pthread_t,スレッドのタイプ
  • コードディスプレイ
    #include <stdio.h>
    #include <stdlib.h>
    //       
    #include<pthread.h>
    
    //              
    int sum  ,count;
    //                   
    pthread_mutex_t lockid;
    //       
    void* runner(void *param);
    
    int main( int argc, char*argv[])
    {
        //      
        pthread_t tid , tid2;
        pthread_attr_t attr;
    
        if(argc != 2){
            fprintf(stderr,"usage : a.out<integer value>
    "
    ); return -1; } if(atoi(argv[1])<0){ fprintf(stderr,"%d must be >= 0
    "
    ,atoi(argv[1])); return -1; } pthread_attr_init(&attr); // pthread_create(&tid,&attr,runner,argv[1]); pthread_create(&tid2,&attr,runner,argv[1]); // 。 pthread_join(tid,NULL); pthread_join(tid2,NULL); // printf("Sum = :%d
    "
    ,sum); } void* runner(void *param){ int i , upper = atoi(param); pthread_mutex_lock(&lockid); count += 1; printf(" %d :
    "
    ,count); if(count == 1){ for(i = 1; i < upper/2 ; i++){ sum += i ; } }else if(count ==2 ){ for(i = upper/2; i < upper ; i++){ sum += i ; } }else{ printf(" , !
    "
    ); } printf(" %d :%d\t
    "
    ,count,sum); pthread_mutex_unlock(&lockid); pthread_exit(0); }

    プログラム実行結果
    mark@mark-pc:~/Code/C/PThreadTest$ gcc  main.c  -lpthread  -o Main
    mark@mark-pc:~/Code/C/PThreadTest$ ./Main 100
    
         111225    
         224950    
    
    Sum = :4950

    詳細分析
    次に、このコードのコアについて説明します.まず、スレッドを作成する前に行う「例外」処理は、最も重要ではありませんが、不可欠です.パラメータの判断です.
    次に、スレッドを作成する4つのパラメータの具体的な意味です.それぞれ、参照するスレッドのid、属性の参照、スレッドのエントリ関数の名前、およびスレッドに転送する方法のパラメータです.ここでは参照タイプのスレッドidであることに注意してください.スレッドを作成した結果をスレッドidに返すことができることを見出します.これで修正が完了しました.
    最後に,スレッドのエントリ関数で関連項目を処理した.判断スレッド、ロック、ロック解除などの操作が含まれます.両方のスレッドが完了すると、メイン関数(プロセスとみなすことができます)が起動します.最後の出力タスクを完了します!
    まとめ
    ええと、私がここで完成したマルチスレッドのインタラクションは、最も標準的なものではなく、「挫折」とも考えられます.しかし、主な思想は比較的正統である.実際の開発では,マルチスレッドのコラボレーションやインタラクティブなタスクをよりよく行うには,多くの面での協力が必要である.結局、この方面の知識に触れたばかりなので、コードには避けられない問題があります.博友たちの批判と指摘を歓迎して、あなたたちと一緒に進歩することを望んでいます.