Параллельный C++ программирования? [закрытый]

Если вы действительно хотите избежать # включения неприятного заголовочного файла в файл заголовка, вы можете сделать это:

hpp файл:

class MyClass
{
public:
    template<typename ThrowAway>
    void doesStuff();
};

cpp file

#include "MyClass.hpp"
#include "Annoying-3rd-party.hpp"

template<> void MyClass::doesStuff<This::Is::An::Embedded::Type>()
{
    // ...
}

Но тогда:

  1. вам нужно будет указать встроенный тип во время вызова (особенно если ваша функция не принимает никаких параметров встроенного типа)
  2. ваша функция не может быть виртуальной (потому что это шаблон)

Итак, да, компромиссы ...

46
задан yesraaj 20 October 2008 в 15:16
поделиться

6 ответов

Параллелизм о Вашем коде, делающем несколько вещей одновременно. Это обычно делается с явными "потоками", но существуют другие возможности. Например, при использовании директив OpenMP в коде тогда компилятор, что OpenMP поддержек автоматически генерирует потоки для Вас.

Поток короток для "потока выполнения". В однопоточной программе C++ выполнение запускается в основном (), и затем продолжается последовательным способом. В многопоточной программе первый поток запускается в основных, но дополнительных потоках, может быть запущен приложением, которые запускаются в определенной пользователями функции. Они тогда работают одновременно, или параллельно с исходным потоком.

В C++ 0x потоки запускаются с помощью std::thread класс:

void my_function()
{
    // do stuff
}
std::thread my_thread(my_function); // run my_function in its own thread

новый C++ 0x стандарт также поддерживает:

  • атомарные значения и операции с std::atomic<> шаблон класса,
  • взаимные исключения для защиты данных (std::mutex, std::recursive_mutex, и т.д.)
  • классы блокировки для простоты руководящего времени жизни блокировки (std::lock_guard<>, std::unique_lock<>)
  • std::lock и std::try_lock функции для управления получением нескольких блокировок одновременно, не рискуя мертвой блокировкой
  • условные переменные для упрощения ожидания события (std::condition_variable, std::condition_variable_any)
  • фьючерсы, обещания и упакованные задачи упростить передающие данные между потоками и ожидание значения для чтения. Это обращается к классику, "как я возвращаю значение из потока" вопрос.
  • ориентированная на многопотоковое исполнение инициализация локальных статических объектов
  • thread_local ключевое слово для объявления локальных данных потока

я дал более подробный обзор нового C++ 0x библиотека потока в моей статье о devx.com: Более простая Многопоточность в C++ 0x

я пишу о многопоточности и параллелизме в C++ на [1 113] мой блог . Я также пишу книгу по теме: Параллелизм C++ в Действии .

73
ответ дан Anthony Williams 7 November 2019 в 23:57
поделиться

Когда Вы говорите, "как C++, новые стандарты упрощают" параллельное программирование, я предполагаю, что Вы говорите о скоро(?), чтобы быть выпущенным C++ 09 стандартов.

новый стандарт как, который это в настоящее время выдерживает в черновой форме, поддерживает следующие объекты, которые помогают с параллельным программированием:

  • атомарные типы и адреса
  • класс
  • потока thread_local устройство хранения данных (который был просто добавлен в черновой стандарт несколько месяцев назад)
  • взаимное исключение (взаимоисключающие классы)
  • условные переменные - это особенно хорошо для Windows, так как условные переменные трудно реализовать правильно в Win32. Это означает, что в конечном счете Microsoft должна оказать поддержку для условных переменных, по крайней мере, в MSVC ++ время выполнения, таким образом, будет легко получить корректную семантику условной переменной на Win32.
17
ответ дан Michael Burr 7 November 2019 в 23:57
поделиться

Возможно, это видео могло бы помочь пролить некоторый свет для Вас:-)
http://channel9.msdn.com/posts/Charles/The-Concurrency-Runtime-Fine-Grained-Parallelism-for-C/

5
ответ дан Joel Martinez 7 November 2019 в 23:57
поделиться

Параллелизм имеет несколько потоков выполнения для данного процесса. На сегодняшний день C++ непосредственно не поддерживает его. Однако несколько библиотек существуют, который свяжет заданную функцию с новым потоком выполнения. Стандарт Unix является pthreads библиотекой.

5
ответ дан Paul Nathan 7 November 2019 в 23:57
поделиться

C++ CSP2 - Легкий Параллелизм для C++

http://www.cs.kent.ac.uk/projects/ofa/c++csp/

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

(См. Пи Оккама для параллельного языка программирования (также на основе CSP))

5
ответ дан Dynite 7 November 2019 в 23:57
поделиться

Мое немного отличающееся взятие, характерное для будущих направлений парадигм программирования:

Параллелизм о записи Вашей программы, таким образом, что это может делать несколько вещей сразу если поддержка оборудования это. В настоящее время большинство языков имеет довольно тяжелые и сложные механизмы, чтобы позволить программисту определять это (например: потоки с ручной синхронизацией, директивами препроцессору OpenMP, и т.д.).

, Поскольку аппаратные средства улучшаются, они собираются улучшиться горизонтально (больше ядер), а не вертикально (быстрее одноядерный). Это означает, что приложения должны будут иметь "скрытый параллелизм" для масштабирования с "более быстрыми" аппаратными средствами. Языки в настоящее время пытаются развиться, чтобы лучше всего поддерживать это, быть в положении лучшего языка для будущей разработки.

C++ 0x добавляет больше встроенной поддержки "старых" методов программирования параллелизма. Различные поставщики компилятора добавляют "новые" методы, которые абстрагируют модель потоков и позволяют решения во время выполнения о числах потоков, и т.д. (на основе аппаратных средств машины); для Microsoft в частности, см. F#, время выполнения параллелизма, найдите что-либо подобное расширениям, и т.д.

Hope, которая помогает.

3
ответ дан Nick 7 November 2019 в 23:57
поделиться
Другие вопросы по тегам:

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