C ++ 0x многопоточность - PullRequest
8 голосов
/ 04 июня 2010

С появлением в STL средств потоков для нового стандарта C ++ (C ++ 0x), будет ли лучше изменить существующий код, использующий потоки POSIX или даже Windows, для использования потоков STL?

Ответы [ 5 ]

5 голосов
/ 04 июня 2010

Вы всегда можете хеджировать свои ставки ... написать свой собственный простой API потоков, достаточно функциональный для того, чтобы делать то, что нужно вашему приложению, и изменить свой код, ориентируясь только на API потоков. Затем вы можете реализовать внутреннюю часть своего пользовательского API потоков, используя Windows, Posix или STL или что-либо еще, и изменять реализацию всякий раз, когда вам нужно, без необходимости каждый раз прикасаться ко всей базе кода.

Делая это таким образом, вы можете начать с реализации STL, а затем, если окажется, что, например, При использовании Windows возникает проблема, которую трудно решить, вы можете просто включить альтернативную реализацию Windows-API в my_threading_api.cpp (внутри #ifdef WIN32), и вы вернетесь в бизнес.

4 голосов
/ 04 июня 2010

Многое будет зависеть от того, насколько вы заботитесь о переносимости, и насколько вы используете возможности, которые ваш нативный API может обеспечить, чего нет в стандартной библиотеке. Потоки в стандартной библиотеке достаточно похожи на POSIX, что (по крайней мере, не случайно) я не могу себе представить, сколько вы выиграете, если останетесь с POSIX (и из-за схожести перенос на использование стандартной библиотеки обычно должен быть довольно простым).

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

3 голосов
/ 04 июня 2010

Не меняйте, если вам это действительно не нужно. Я предполагаю, что ваш существующий код работает хорошо.

2 голосов
/ 04 июня 2010

Это зависит.

Потоки C ++ 0x пока широко не поддерживаются (я думаю, что GCC реализует это, но MSVC не делает, и я не знаю, когда они планируют добавить эту поддержку, но я могу подозревать, что они рассматривают это функция низкого приоритета)

Если ваш код работает как есть, зачем его менять? Для новых приложений C ++ и при условии поддержки компилятора я бы выбрал потоки C ++ 0x просто потому, что они стандартные, и это гораздо более приятный API, чем потоки Win32 или POSIX.

2 голосов
/ 04 июня 2010

Невозможно сказать, сколько пройдет времени, прежде чем функции библиотеки C ++ 0x будут широко поддерживаться, поэтому ответ вполне может зависеть от того, насколько вы привязаны к конкретному компилятору. Вы также можете рассмотреть платформу или библиотеку, которая работает поверх собственной реализации или реализации библиотеки C ++ 0x, такой как Boost Threads или Intel Threading Building Blocks , и позволить этому библиотека обрабатывает детали того, использует ли она функции C ++ 0x или API-интерфейсы платформы.

...