Некоторые вопросы относительно объектов синхронизации [Linux OS] - PullRequest
1 голос
/ 24 января 2011

Меня очень смущают следующие утверждения ..

  1. "Мьютекс легкий и быстрее семафора"
  2. "Семафор использует больше памяти, чем переменная условия"

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

Спасибо

Ответы [ 2 ]

5 голосов
/ 24 января 2011

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

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

Я бы рекомендовал вам прочитать следующее на эту тему:

0 голосов
/ 25 января 2011

Обратите внимание, что вы не ограничены мьютексами, семафорами или условными переменными.Вы также можете использовать прямые атомарные операции.не забудьте в Google "gcc атомарные операции" тоже.Кстати, это самый быстрый / низкоуровневый способ синхронизации.

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