いっしょにtalk C栗(第百八回:C言語例--スレッド作成と終了一)


皆さん、こんにちは、前回はスレッドの概要の例をお話ししましたが、今回はスレッドの作成と終了についてお話しします.余談はさておき,話は本筋に戻る.一緒にtalk C栗を食べましょう!
今回はスレッドの作成と終了方法について説明します.スレッドは通常、プロセスの作成に伴って作成されます.スレッドはプロセスに依存するため、プロセスの作成に成功すると、いくつかの作業を完了するためにスレッドが作成されます.たとえば、前回紹介したfirefoxプロセスでは、起動時に多くのスレッドが作成されています.
スレッドの終了は通常プロセスによって制御され、プロセスはプログラムの必要に応じてスレッドを終了する.ただし、exit関数を使用してプロセスを終了すると、プロセスが作成したスレッドがプロセスの終了に伴って終了することは間違いありません.
私がそう言うと、抽象的な感じがするかもしれませんが、次に、スレッドの作成と終了方法を具体的な例で説明します.説明する前に、スレッドに関連する3つの関数について説明します.
1.pthread_create関数
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);

この関数はスレッドを作成するために使用されます.この関数には4つのパラメータがあります.次に、それぞれについて説明します.
  • の最初のパラメータはpthreadタイプのポインタであり、関数の実行に成功した後、このポインタは新しく作成されたスレッドの識別子を指し、スレッドの識別子を操作することでスレッドを操作することができる.
  • の2番目のパラメータはpthread_です.attr_新しく作成されたスレッドに値を付与するスレッド属性を含む変数を指すtタイプのポインタ.スレッドのプロパティを変更したくない場合は、空のポインタを使用します.
  • の3番目のパラメータは、voidタイプのポインタであり、関数はvoidタイプのポインタを返します.新しいスレッドの作成に成功すると、この関数が実行されます.
  • の4番目のパラメータはvoidタイプのポインタであり、このポインタが指す変数は3番目のパラメータの関数のパラメータとされる.
  • この関数が正常に実行された場合、ゼロが返されます.そうでなければ、対応するエラーコードが返されます.

  • 2.pthread_exit関数
    void pthread_exit(void *retval);

    この関数はスレッドを終了するために使用され、パラメータは1つしかありません.
  • パラメータはvoidタイプのポインタであり、このポインタが指す変数はスレッド終了時の内容を含む.通常、スレッドが終了した状態を格納するために使用されます.
  • この関数が正常に実行された場合、ゼロが返されます.そうでなければ、対応するエラーコードが返されます.

  • 3.pthread_join関数
    int pthread_join(pthread_t thread, void **retval);

    この関数はスレッドの終了を待つために使用され、通常は簡単な同期に使用され、プロセス内のwait関数に似ています.
  • の最初のパラメータはpthread_です.スレッドの識別子を含むtタイプの変数ですpthread_create関数の最初のパラメータは、変数の値を得る.
  • の2番目のパラメータはpthread_を指す2次ポインタです.exit関数のパラメータなので、通常、このポインタを使用してスレッドの終了時の状態を取得します.
  • この関数が正常に実行された場合、ゼロが返されます.そうでなければ、対応するエラーコードが返されます.

  • この3つの関数を使用する場合は、「pthread.h」ヘッダファイルを含める必要があります.また、Mintで使用しているファイルの場所は次のとおりです.
    /usr/include/pthread.h
    中の内容を開けてみてください.例えば、このファイルのpthread_create関数のプロトタイプは次のとおりです.
    extern int pthread_create (pthread_t *__restrict __newthread,
                               const pthread_attr_t *__restrict __attr,
                               void *(*__start_routine) (void *),
                               void *__restrict __arg) __THROWNL __nonnull ((1, 3));

    この関数は複雑に見えますが、他は私たちがさっき紹介したように、手紙の末尾に小さなしっぽが増えたにすぎません.
    皆さん、スレッドの作成と終了の例についてお話しします.後に何か例があるか知りたいので、次の分解を聞いてください.