Портативный Writer-Readers спинлок

я использовал boost::shared_mutex как объекты синхронизации в модели Writer-Readers. Однако это значительно медленнее по сравнению с отсутствием блокировок (в моем тесте: без считывателей для записи 500 000 значений требуется 100 мсек, если не используются блокировки, и ~ 500 мсек, если boost::shared_mutex используемый). Вот почему я решил рассмотреть что-то вроде спинлок. Я хотел бы сделать переносной спинлок (Windows + Linux).

  1. Есть ли какая-нибудь бустер-оболочка, которую я могу использовать мгновенно?
  2. это это хорошая тема, которая показывает, как реализовать спинлок на Windows. Но я не смог найти эквиваленты Win32 API, такие как InterlockedCompareExchange, YieldProcessor, InterlockedDecrement в линуксе

Обновление 2016/03/08

Я узнал руководство и реализация выпущен фейсбуком на github. Еще не пробовал. Я обновил здесь для всех, кто будет иметь тот же вопрос и, возможно, захотите обратиться.

1

Решение

  1. Для C ++ 03 не существует переносимого решения, поскольку в C ++ 03 нет модели памяти, но вы можете легко реализовать ее, просто скопировав atomic_flag реализации вашей целевой платформы.

  2. Мой комментарий к данной ссылке / туториалу: volatile не должен использоваться прикладным программистом, если у вас нет доступа к необычной памяти. рекомендую этот и все остальные статьи на эту тему. Там должна быть готовая к использованию библиотека для скачивания. Я не знаю, является ли это только C ++ 11.

  3. Я предполагаю, что вы не очень опытны с многопоточностью, синхронизацией и блокировками. Чего бы вы не хотели достичь, просто сначала идите по стандартному маршруту, а потом возвращайтесь, если вам не хватает производительности.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]