linuxスレッドシリーズ(2)linuxスレッド分類

983 ワード

スレッドは、スケジューラによってユーザー・レベル・スレッドとカーネル・レベル・スレッドの2つに分けられます.
a)ユーザーレベルスレッド:主に解決したのはコンテキスト切替の問題で、そのスケジューリング過程はユーザーによって決定される;
b)カーネルレベルスレッド:カーネルスケジューリングメカニズムによって実現される.
現在、ほとんどのオペレーティングシステムでは、ユーザーレベルのスレッドとカーネルレベルのスレッドが共存する方法が採用されています.ユーザー・レベル・スレッドカーネル・レベル・スレッドの実行をバインドするには、1つのプロセス内のカーネル・レベル・スレッドが固定されたタイムスライスに割り当てられ、ユーザー・レベル・スレッドが割り当てられたタイムスライス内のコア・レベル・スレッドが基準となります.デフォルトでは、ユーザー・レベル・スレッドとカーネル・レベル・スレッドは1対1または複数対1であり、リアルタイム性が低下します.cpuがスレッドに割り当てられたタイムスライスが切れた後、スレッドが実行されなかった場合、スレッドは実行状態から準備完了状態に戻り、cpuを他のスレッドに譲ります.
linuxユーザーレベルのスレッドは一般的にpthreadスレッドライブラリを採用してスレッドのアクセスと制御を実現し、POSIXによって提案され、良好な移植性を持っている.Linuxスレッドプログラムのコンパイルにはgcc上でライブラリpthreadをリンクする必要があります.各プロセス内の異なるスレッドには独自の一意のID(ID)があり、スレッドIDはその属するプロセス環境でのみ有効であり、スレッドIDはpthread_である.tデータ型.
次の2つの関数は、2つのスレッドに同じスレッドID(同じスレッドかどうか)があるかどうかと、自分のスレッドを返すスレッドIDがあるかどうかを判断します.
#include 
int pthread_equal(pthread_t, pthread_t);
  :      0,    0
pthread_t pthread_self(void);
  :        ID