С появлением поточной обработки средств в STL для нового стандарта C++ (C++ 0x), будет лучше изменить существующий код, который использует поточную обработку POSIX или даже поточную обработку Windows для использования поточной обработки STL?
Вы всегда можете подстраховаться ... напишите свой собственный простой потоковый API, который просто достаточно функциональный, чтобы делать то, что нужно вашему приложению, и изменить свой код так, чтобы он был нацелен только на API потоковой передачи. Затем вы можете реализовать внутреннюю часть своего настраиваемого API потоковой передачи с помощью Windows, Posix или STL или чего-то еще и изменять реализацию всякий раз, когда вам нужно, без необходимости каждый раз касаться всей своей кодовой базы.
Поступая таким образом, вы можете начать с реализации STL, а затем, если окажется, что, например, У Windows есть проблема, которую сложно решить, используя это, вы можете просто включить альтернативную реализацию Windows-API в my_threading_api.cpp (внутри #ifdef WIN32), и вы вернетесь в бизнес.
Многое будет зависеть от того, насколько вы заботитесь о переносимости и насколько вы пользуетесь функциями, которые ваш собственный API может предоставить, чего не предлагает стандартная библиотека. Распределение потоков в стандартной библиотеке достаточно похоже на POSIX, так что (по крайней мере, небрежно) я не могу придумать много, что вы могли бы получить, оставаясь с POSIX (и из-за схожести перенос для использования стандартной библиотеки обычно должен быть довольно простым).
Многопоточность Windows настолько отличается, что вы с большей вероятностью столкнетесь с чем-то, что будет нетривиально для переноса на стандартную библиотеку, и даже в лучшем случае перенос, вероятно, будет нетривиальным.
Неизвестно, сколько времени пройдет, прежде чем функции библиотеки C++0x будут широко поддерживаться, поэтому ответ вполне может зависеть от того, насколько привязан к конкретному компилятору, которым вы можете захотеть быть. Вы также можете рассмотреть платформу или библиотеку, которая работает поверх собственной реализации библиотеки или библиотеки C++0x, такой как Boost Threads или Intel Threading Building Blocks, и позволить этой библиотеке обрабатывать детали того, использует ли она функции C++0x или API платформы.
Не меняйте, если это вам действительно не нужно. Я предполагаю, что ваш существующий код работает хорошо.
Это зависит от .
Многопоточность C ++ 0x пока не поддерживается широко (я думаю, что GCC ее реализует, а MSVC - нет, и я не знаю, когда они планируют добавить эту поддержку, но я могу подозревать, что они ее рассматривают. функция с низким приоритетом)
Если ваш код работает как есть, зачем его менять? Для новых приложений C ++ и при условии поддержки компилятора я бы выбрал потоки C ++ 0x просто потому, что они стандартные, и это гораздо более приятный API, чем потоки Win32 или POSIX.