pthread_cond_signal и возможное голодание потока - PullRequest
2 голосов
/ 19 июня 2011

Если более чем один поток ожидает переменную условия, каков порядок пробуждения для pthread_cond_signal.Я читал, что pthread_cond_signal не обязательно просыпаться в порядке сна.Так что это может вызвать голод ... не так ли?

Спасибо

Ответы [ 3 ]

4 голосов
/ 19 июня 2011

Это определяется политикой планирования, которая должна быть справедливой.

Если потоки не испытывают недостатка в расписании - они тоже не должны этого делать.

Из spec :

Если для переменной условия заблокировано более одного потока, политика планирования определяет порядок, в котором потоки разблокированы.

1 голос
/ 21 июня 2011

Справедливость не гарантируется, поэтому голод всегда возможен.Чтобы обеспечить абсолютную справедливость, вам необходимо реализовать собственный механизм, использующий очередь для отслеживания порядка прибытия.

0 голосов
/ 30 августа 2011

Этот вопрос предполагает злоупотребление условной переменной. Использование условной переменной служит для предупреждения потока о возникновении условия. Когда вы активируете только один поток, это должно быть потому, что любой поток может обслуживать условие. Если вам важно, какой поток просыпается, то это не тот случай, когда какой-либо поток может обслуживать условие.

Хотя вы, вероятно, получите то, что вы хотите в большинстве реализаций, возможно, есть лучший способ сделать то, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...