Замедляет ли использование блокировок в потоке другие потоки, которые не используют блокировок? - PullRequest
1 голос
/ 03 марта 2020

Если у меня есть поток, который часто использует блокировки, он будет тормозить другие потоки, которые не используют блокировки (например, из-за поведения глобальной блокировки в CPU et c).

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Нет. Замки просто состоят из системного вызова. В C / C ++ нет необходимости перегружать интерпретатор, нет «глобальной блокировки интерпретатора» и т. Д.

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

0 голосов
/ 03 марта 2020

Когда поток получает блокировку, другие потоки могут получать такую ​​же блокировку, пока она не будет освобождена потоком, который получил ее первым. Пока другие потоки ожидают снятия блокировки, они переходят в режим ожидания, то есть останавливаются и ожидают снятия блокировки. Вот почему рекомендуется снимать блокировки, как только вы закончите с ними.

...