Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ

Тут можно читать онлайн Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство ДМК Пресс, год 2012. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
  • Автор:
  • Жанр:
  • Издательство:
    ДМК Пресс
  • Год:
    2012
  • Город:
    Москва
  • ISBN:
    978-5-94074-448-1
  • Рейтинг:
    5/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ краткое содержание

Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - описание и краткое содержание, автор Энтони Уильямс, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
В наши дни компьютеры с несколькими многоядерными процессорами стали нормой. Стандарт С++11 языка С++ предоставляет развитую поддержку многопоточности в приложениях. Поэтому, чтобы сохранять конкурентоспособность, вы должны овладеть принципами и приемами их разработки, а также новыми средствами языка, относящимися к параллелизму.
Книга «Параллельное программирование на С++ в действии» не предполагает предварительных знаний в этой области. Вдумчиво читая ее, вы научитесь писать надежные и элегантные многопоточные программы на С++11. Вы узнаете о том, что такое потоковая модель памяти, и о том, какие средства поддержки многопоточности, в том числе запуска и синхронизации потоков, имеются в стандартной библиотеке. Попутно вы познакомитесь с различными нетривиальными проблемами программирования в условиях параллелизма.

Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - читать онлайн бесплатно полную версию (весь текст целиком)

Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - читать книгу онлайн бесплатно, автор Энтони Уильямс
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Синхронизация

Обращения к функциям notify_one(), notify_all(), wait(), wait_for()и wait_until()одного и того же объекта std::condition_variable_anyсериализуются. Обращение к notify_one()или notify_all()будит только потоки, запущенные до этого обращения.

STD::CONDITION_VARIABLE_ANY::WAIT , ПЕРЕГРУЖЕННАЯ ФУНКЦИЯ-ЧЛЕН, ПРИНИМАЮЩАЯ ПРЕДИКАТ

Ожидает, пока условная переменная std::condition_variable_anyполучит сигнал в результате обращения к notify_one()или notify_all()и при этом предикат равен true.

Объявление

template

void wait(Lockable& lock, Predicate pred);

Предусловия

Выражение pred()должно быть допустимо и возвращать значение, преобразуемое в тип bool. Тип Lockableудовлетворяет требованиям концепции Lockableи lockвладеет блокировкой.

Результат

Эквивалентно циклу

while (!pred()) {

wait(lock);

}

Исключения

Исключение, возбужденное в результате обращения к pred, или std::system_error, если действие не выполнено.

Примечание. Возможность ложного пробуждения означает, что функция predможет вызываться несколько раз (сколько именно, не определено). При любом вызове predмьютекс, на который ссылается объект lock, гарантированно будет захвачен, и функция вернет управление тогда и только тогда, когда результатом вычисления (bool)pred()является true.

Синхронизация

Обращения к функциям notify_one(), notify_all(), wait(), wait_for()и wait_until()одного и того же объекта std::condition_variable_anyсериализуются. Обращение к notify_one()или notify_all()будит только потоки, запущенные до этого обращения.

STD::CONDITION_VARIABLE_ANY::WAIT_FOR , ФУНКЦИЯ-ЧЛЕН

Ожидает, пока условная переменная std::condition_variable_anyполучит сигнал в результате обращения к notify_one()или notify_all(), либо истечет таймаут, либо произойдёт ложное пробуждение.

Объявление

template

std::cv_status wait_for(

Lockable& lock,

std::chrono::duration const& relative_time);

Предусловия

Тип Lockableудовлетворяет требованиям концепции Lockableи lockвладеет блокировкой.

Результат

Атомарно разблокирует предоставленный объект lockи блокирует поток, пока он не будет разбужен обращением к notify_one()или notify_all()из другого потока, либо не истечет таймаут, заданный аргументом relative_time, либо не произойдёт ложное пробуждение. Перед возвратом управления из wait_for()объект lockснова блокируется.

Возвращаемое значение

std::cv_status::no_timeout, если поток был разбужен в результате обращения к notify_one()или notify_all()либо ложного пробуждения. В противном случае std::cv_status::timeout.

Исключения

Исключение типа std::system_error, если действие не выполнено. Если объект lockбыл разблокирован при обращении к wait_for(), он снова блокируется при выходе из нее, даже если выход произошёл в результате исключения.

Примечание. Ложное пробуждение означает, что поток, вызвавший wait_for(), может быть разбужен, даже если ни один другой поток не обращался к notify_one()или notify_all(). Поэтому рекомендуется использовать перегруженный вариант wait_for(), который принимает предикат. Если это нежелательно, то рекомендуется вызывать wait_for()в цикле, где проверяется предикат, ассоциированный с условной переменной. При этом необходимо следить, не истек ли таймаут. Во многих случаях предпочтительнее использовать функцию wait_until(). Поток может быть блокирован дольше, чем указано. Если возможно, истекшее время измеряется по стабильным часам.

Синхронизация

Обращения к функциям notify_one(), notify_all(), wait(), wait_for()и wait_until()одного и того же объекта std::condition_variable_anyсериализуются. Обращение к notify_one()или notify_all()будит только потоки, запущенные до этого обращения.

STD::CONDITION_VARIABLE_ANY::WAIT_FOR , ПЕРЕГРУЖЕННАЯ ФУНКЦИЯ-ЧЛЕН, ПРИНИМАЮЩАЯ ПРЕДИКАТ

Ожидает, пока условная переменная std::condition_variable_anyполучит сигнал в результате обращения к notify_one()или notify_all()и при этом предикат равен true, либо истечет указанный таймаут.

Объявление

template

typename Period, typename Predicate>

bool wait_for(

Lockable& lock,

std::chrono::duration const& relative_time,

Predicate pred);

Предусловия

Выражение pred()должно быть допустимо и возвращать значение, преобразуемое в тип bool. Тип Lockableудовлетворяет требованиям концепции Lockableи lockвладеет блокировкой.

Результат

Эквивалентно следующему коду:

internal_clock::time_point end

= internal_clock::now() + relative_time;

while (!pred()) {

std::chrono::duration remaining_time =

end-internal_clock::now();

if (wait_for(lock, remaining_time) == std::cv_status::timeout)

return pred();

}

return true;

Возвращаемое значение

true, если последнее обращение к pred()вернуло true; false, если истекло время, заданное в аргументе relative_timeи обращение к pred()вернуло false.

Примечание. Возможность ложного пробуждения означает, что функция predможет вызываться несколько раз (сколько именно, не определено). При любом вызове predмьютекс, на который ссылается объект lock, гарантированно будет захвачен, и функция вернет управление тогда и только тогда, когда результатом вычисления (bool)pred()является trueили истекло время, заданное в аргументе relative_time. Поток может быть блокирован дольше, чем указано. Если возможно, истекшее время измеряется по стабильным часам.

Исключения

Исключение, возбужденное в результате обращения к pred, или std::system_error, если действие не выполнено.

Синхронизация

Обращения к функциям notify_one(), notify_all(), wait(), wait_for()и wait_until()одного и того же объекта std::condition_variable_anyсериализуются. Обращение к notify_one()или notify_all()будит только потоки, запущенные до этого обращения.

STD::CONDITION_VARIABLE_ANY::WAIT_UNTIL , ФУНКЦИЯ-ЧЛЕН

Ожидает, пока условная переменная std::condition_variable_anyполучит сигнал в результате обращения к notify_one()или notify_all()либо будет достигнут указанный момент времени, либо произойдёт ложное пробуждение.

Объявление

template

std::cv_status wait_until(

Lockable& lock,

std::chrono::time_point const& absolute_time);

Предусловия

Тип Lockableудовлетворяет требованиям концепции Lockableи lockвладеет блокировкой.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Энтони Уильямс читать все книги автора по порядку

Энтони Уильямс - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Параллельное программирование на С++ в действии. Практика разработки многопоточных программ отзывы


Отзывы читателей о книге Параллельное программирование на С++ в действии. Практика разработки многопоточных программ, автор: Энтони Уильямс. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x