C++ 0x поточная обработка

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

8
задан Alerty 4 June 2010 в 14:44
поделиться

5 ответов

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

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

5
ответ дан 5 December 2019 в 10:39
поделиться

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

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

4
ответ дан 5 December 2019 в 10:39
поделиться

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

2
ответ дан 5 December 2019 в 10:39
поделиться

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

3
ответ дан 5 December 2019 в 10:39
поделиться

Это зависит от .

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

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

2
ответ дан 5 December 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: