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を返す必要はありません 。}