Re[11]: Вопрос по многопоточности для C++ проекта
От: AlexGin Беларусь  
Дата: 06.07.16 06:57
Оценка:
Здравствуйте, b0r3d0m, Вы писали:

AG>>Нет — критические секции в WinAPI не разделяются между процессами


B>Я про Mutex'ы.


AG>>Именно поэтому у меня и возник данный вопрос:

AG>>можно ли в Qt, boost, STL использовать такие штуковины, как критические секции

B>Да что вы так WinAPI боитесь-то? Напишите свой враппер, протестируйте его и забудьте про детали реализации.


Во-первых — я не боюсь WinAPI.
Более того, работал на старой работе в течение примерно 5-ти лет очень плотно и с WinAPI, и с MFC.
Посему и понимаю как достоинства, так и недостатки данного стека технологий.

Достоинство — хорошая оптимизация по производительности под ОС семейства Windows.
Дальше начинаются недоститки: нет кроссплатформенности — главный и основной из них.
Отсутствие лаконичности — "монстроидальность" недостаток небольшой, всегда можно найти класс-обёртку (на худой конец — взять что-то из MFC).

Во-вторых я прекрасно понимаю, что на сегодняшний день надо осваивать кроссплатформенные технологии.
Если завтра мой код придется портировать на Linux, то это портирование должно проходить максимально беспроблемно.
И вот тут уже "альтернативние" средства работы с многопоточностью начинают сильно проигрывть по производительности:
http://stackoverflow.com/questions/9997473/stdmutex-performance-compared-to-win32-critical-section

Относительно неплохим вариантом здесь выглядит свой собственный класс-обёртка,
оптимизированный к требованиям моего конкретного проекта и "скрывающий" детали реализации механизмов многопоточности.
Таким образом, мы будем иметь два таких класса — один для WinAPI, другой — для Linux.
Оба этих класса — должны наследовать общий интерфейс (aka абстрактный базовый класс).

B>Алсо, у Microsoft есть заголовочный файл concrt.h, в котором, помимо всего прочего, есть обёртка над критическими секциями. Насколько он публичный, я не в курсе, надо гуглить.

Есть такая штука, но это достаточно "редкий зверь".
И нет уверенности, что он не привязан к специфике конкретной ОС или студии. Его применение не выглядит как верное решение.
Вместо этого, для Windows можно всю обертку сделать на чистом WinAPI.

Ну и еще пару интересных ссылочек:
1) https://www.gittprogram.com/question/722603_std-mutex-performance-compared-to-win32-mutex-or-critical-section-apis.html
2) https://social.msdn.microsoft.com/Forums/vstudio/en-US/85652a61-33fb-4c17-9a05-2b241741fea7/concurrency-runtime-spinlock-?forum=parallelcppnative
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.