Linuxでのスレッドおよびpthreadライブラリ

I.概要

Linuxはプロセスとスレッドを区別せず、すべてタスクと見なされます。これらはすべてtask_structを作成します。区別方法スレッドは同じアドレス空間を共有しますが、プロセスは排他的なアドレス空間です。

複数のスレッドが同じプロセスのアドレス空間を共有する

利点:

通信は便利で、グローバル変数を渡すことができます。

短所:

共有データにアクセスするときは、同期と相互排除を考慮する必要があります。

 

2.スレッド共有リソース:

実行可能な命令

静的データ

処理中のファイル記述子を開く

現在の作業ディレクトリ

ユーザーID

ユーザーグループID

 

スレッドのプライベートリソース:

スレッドID

PC(プログラムカウンター)および関連レジスタ:異なるスレッドが異なるコードを実行することを確認します。

積み重ね

エラー番号

優先度

実行ステータスと属性

 

4. Linuxスレッドライブラリ:

pthreadスレッドライブラリ:(POSIX)

1.スレッドを作成します。

2.スレッドの再利用(pthread_join):

pthread_join(pthread_tスレッド、void ** retval)

* retvalは、pthread_exitのreturnまたはretvalによって返される値など、スレッドのスレッド関数に対応する戻り値を受け取ります。

3.終了スレッド(pthread_exit):

現在のスレッドを終了し、終了すると現在のプロセスが終了します。

pthread_exit(void * retval)はreturn retvalと同等であり、さまざまなタイプを使用できます。

retvalは、pthread_joinを介して他のスレッドによって取得できます。

例:

#include <stdio.h> 
#include <unistd.h> 
#include <pthread.h> void * task(void * param)
{ 
    sleep(5 ); 
    printf(" hello \ n " );
     // pthread_exit(NULL) ;
     // pthread_exit( "サブスレッド実行完了"); // NULLまたは文字列を返すことができますreturn " サブスレッド実行完了" ; 
} int main()
{ // 初期スレッド    pthread_t tid;
 void * 結果; // スレッドを作成int rc = pthread_create(&tid、NULL


     


    


    
    、task、NULL); 

    if (rc)
    { 
        printf(" スレッドの作成に失敗しました!\ n " );
         return - 1 ; 
    } 
    pthread_join(tid、result); 
    printf(" メインスレッドの作成\ n " ); 
    printf(" result is%s \ n " 、result); 
    pthread_exit(NULL); //終了してNULLを返すため、0を返す必要はありません
。}

おすすめ

転載: www.cnblogs.com/Stephen-Qin/p/12737699.html