приоритет в получении блокировки в pthreads - PullRequest
0 голосов
/ 06 апреля 2011

Допустим, у меня есть список List, и у меня есть pthread_t t1, который опрашивает из списка, и у меня есть много других потоков, которые вставляют элементы в список.Список заблокирован с помощью блокировки listLock.когда у t1 есть блокировка - если список пуст, он засыпает с pthread_cond_wait(..), а когда поток вставляет в список, он сигнализирует ему.

мой вопрос: если t1 в ожиданиисостояние и есть много потоков, которые застряли в pthread_mutex_lock(&listLock), когда блокировка будет разблокирована, будет ли t1 иметь приоритет, чтобы получить блокировку, или он будет "бороться" с другими потоками, чтобы получить блокировку?

спасибо

Ответы [ 2 ]

0 голосов
/ 07 апреля 2011

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

Планирование потоков с помощью pthreads в Linux и FreeBSD

Основные функции планирования

0 голосов
/ 06 апреля 2011

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

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

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