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形式でスケジューリングしますか?最初のスレッドが終了した後、どのスレッドがスケジュールされますか?
ありがとうございました。第1スレッドが終了した直後に第2スレッドをスケジュールするための回避策はありますか? – Harsha
自分自身で公正なミューテックスを実装する必要があります。これは、標準のmutexを使用して行うことができます。参照:http://stackoverflow.com/questions/5385777/implementing-a-fifo-mutex-in-pthreads – redneb