Здравствуйте, 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