2016-09-04 13 views
1
void main() 
{ 
    ..... 
    pthread_mutex_init(&lock) 
    pthread_create(fun,...) 
    pthread_create(fun,...) 
    pthread_create(fun,...) 
} 

void fun() 
{ 
    pthread_mutex_lock(&lock) 
    ........... 
    pthread_mutex_unlock(&lock) 
} 

上記のコードでは、同じ関数funを呼び出す3つのスレッドを作成しました。私は楽しいの実行がスレッドを作成するよりも時間がかかることを伝えることができます。したがって、最初に3つのスレッドがあります。しかし、ロックを取った後、最初のスレッドは既に実行中です。今、2番目と3番目のスレッドが待機しています。私の質問は、スレッドがスケジュールされるロックが解放された後です。それは第2スレッドか第3スレッドか、またはスケジューラに依存します。スケジューラーは待機中のスレッドのキューを維持し、FIFO形式でスケジューリングしますか?最初のスレッドが終了した後、どのスレッドがスケジュールされますか?

答えて

0

いいえ、FIFOのようには機能しません。ランダムに1つのスレッドが起動します。

+0

ありがとうございました。第1スレッドが終了した直後に第2スレッドをスケジュールするための回避策はありますか? – Harsha

+0

自分自身で公正なミューテックスを実装する必要があります。これは、標準のmutexを使用して行うことができます。参照:http://stackoverflow.com/questions/5385777/implementing-a-fifo-mutex-in-pthreads – redneb

関連する問題