pthreads: имеют ли пробужденные потоки приоритет для повторного входа в критическую секцию - PullRequest
0 голосов
/ 27 февраля 2019

Я прочитал в документации pthread_cond_broadcast следующее:

Незблокированные потоки должны бороться за мьютекс в соответствии с политикой планирования (если применимо), и какесли бы каждый вызвал pthread_mutex_lock ().

Возникает вопрос: не имеет ли пробужденный поток никакого приоритета при повторном получении мьютекса над любым другим потоком?В приведенном ниже примере это будет означать, что поток 2 может вращаться дважды, вызывая signal два раза, даже если в то же время поток 1, даже если его разбудил сигнал, даже не повторно захватил блокировку один раз,просто ожидает pthread_mutex_lock(), где-то в вызове wait(), как и любой другой поток?

поток 1:

while(1) {
    lock
    wait
    unlock
}

поток 2:

while(1) {
    lock
    signal
    unlock
}

1 Ответ

0 голосов
/ 27 февраля 2019

Нет, проснувшиеся потоки не получают особого приоритета при блокировке мьютекса.В вашем примере thread 2 действительно может вращаться много раз, прежде чем thread 1 сможет успешно захватить блокировку и вернуться из pthread_cond_wait().

...