2014-08-13 3 views
2

Я использую MinGW_W64, и мне трудно решить, как двигаться вперед с опцией «threading». Я могу использовать либо потоки posix, либо нити win32. До сих пор я использовал «std :: thread» C++ 11 для моей потоковой передачи (для чего нужен параметр posix threads), и мне очень нравится, что интерфейс делает это так. Тем не менее, я читал из нескольких источников, что потоки posix значительно медленнее, чем потоки win32, и производительность для меня большая проблема.std :: thread, posix threads и win32 threads в MinGW-W64

Мой проект в конечном счете, будет мультиплатформенной, но сейчас моя главная машина развития работает под управлением Windows 7.

Мой вопрос заключается в следующем: POSIX Threads MinGW_W64 медленнее, чем win32 нитей? Если да, то как мне приступить к написанию обертки, которая позволит мне использовать интерфейс std :: thread-like, но использовать потоки win32 под капотом (или найти такую ​​оболочку, если кто-то уже написал)?

+3

'pthreads' на окнах, вероятно,' pthreads-win32', который просто предоставляет API 'pthread', но использует потоки' win32' под капотом. – Rapptz

+0

Кроме того, если вы широко открыты для опций, VS2013 + имеет полную реализацию спецификации 'std :: thread' C ​​++ 11 и использует собственные потоки, мьютексы, переменные условий и т. Д. Я * попрошайничество * мой работодатель позволяют нам отойти от VS2005/VS2010, и это одна из причин (и C++ 11, даже жалкая реализация MS, лучше, чем C++ 98 в любой день недели и два раза в воскресенье). – WhozCraig

+0

Я фактически использую VS2013 прямо сейчас, но я ищу для переключения по нескольким причинам (во-первых, я не могу выделить выравниваемые классы в стеке). –

ответ

3

Существует уже легкая родная реализация станда :: нити и синхронизация примитивы для MinGW, реализованная в чистом WINAPI: https://github.com/meganz/mingw-std-threads

Это заголовок только Lib и должно работать с любой версией MinGW, которая имеет надлежащее Поддержка C++ 11.