Мы создаем чувствительное к задержкам приложение. Наше полное приложение занимает около 2500 тактов в процессе, кроме блокировки, и есть два замка, которые необходимо приобрести и отпустить. Мы не ожидаем конкуренции 99,98% времени. Использование блокировки и разблокировки pthread занимает около 1800 дополнительных циклов. Любые указатели в более быстрых рецептурах? Написание блокировок на основе атомных операций может быть сложным. Мы предпочли бы использовать стандартный код, как в заголовках Linux, или, если это возможно, заголовки заголовков.Более быстрый замок, чем pthreads
3
A
ответ
2
В качестве предложения попробуйте spin_mutex
от Intel's Threading Building Blocks library. Это open-source (GPLv2), поэтому вы также можете проверить источники для деталей реализации.
Также вы можете посмотреть на это: Is my spin lock implementation correct and optimal?
1
Вы не слишком много вариантов. Библиотека Pthread является как можно более общей. Если вы сделаете это более конкретным, меньшее число людей будет использовать его, таким образом, каждый в конечном итоге реализует свои собственные, делая беспорядок.
Я боюсь, что вам придется писать свои собственные, которые специально соответствуют вашим требованиям. Я бы предположил, что это так: http://kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html
Я читаю его сам.
Смежные вопросы
- 1. Более быстрый запрос, чем foreach
- 2. Более быстрый алгоритм, чем вложенные циклы?
- 3. Более быстрый импорт данных, чем Get ["raggedmatrix.mx"]?
- 4. Pandas: более быстрый метод, чем повторение транзакций?
- 5. Более быстрый подход, чем gsub в r
- 6. Поиск LinkedHashMap, более быстрый метод, чем последовательный?
- 7. Более быстрый поиск, чем std :: set
- 8. Более быстрый мобильный сайт, чем рабочий стол
- 9. Более медленная параллельная программа с OpenMP и PThreads, чем последовательная
- 10. Более быстрый SQL-запрос для более чем 2 миллионов строк
- 11. Виндзорский замок: Регистрация дженериков с более чем одним пунктов
- 12. более быстрый amfPHP альтернативный
- 13. Более быстрый (более масштабируемый) DataSet.Merge?
- 14. Более быстрый метод, чем цикл по тысячам записей
- 15. Более быстрый способ получить столбцы таблицы, чем информационная схема?
- 16. Есть ли более быстрый способ, чем array_diff в PHP
- 17. Более быстрый метод, чем Point.distance для расчета столкновения между объектами?
- 18. более быстрый способ сравнить словари, чем использовать набор
- 19. Более быстрый способ чтения пикселя экрана в Python, чем PIL?
- 20. Что такое быстрый метод для более чем двух массивов поплавков?
- 21. Более быстрый способ поиска, чем вложенные циклы в python
- 22. Actionscript, существует ли более быстрый метод хэширования, чем MD5?
- 23. Существует ли более быстрый централизованный контроль версий, чем SVN?
- 24. Как получить более быстрый код, чем numpy.dot для матричного умножения?
- 25. Быстрый поиск в Google с более чем двумя переменными
- 26. Более быстрый способ записи CSV-данных, чем fprintf()?
- 27. Есть ли более быстрый способ экспортировать NatTable, чем ExportCommand?
- 28. Есть ли более быстрый метод записи, чем fseek и fwrite?
- 29. Более быстрый способ представления документации в приложении iOS, чем UIWebView?
- 30. Есть ли более быстрый метод, чем UNION ALL
Если это почти неконфликтная ситуация, вы должны сначала попытаться включить блокировку, они лучше блокировки (в определенной ситуации, так как это предотвратит переход потоков в состояние блокировки). Атомные операции также являются хорошим выбором, но использовать их сложно. Главным образом атомная операция используется в программах масштабируемости. – peeyush
Кстати, как вы профилировали свой код таким образом? – peeyush
Пробовал pthread_spinlock. ABout на 40% меньше времени вне контекста, но все равно слишком много. Я могу попытаться изучить атомные операционные системы в http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins, но этот материал может быть сложным. –