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

Здесь есть возможность читать онлайн «Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2012, ISBN: 2012, Издательство: ДМК Пресс, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

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

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Параллельное программирование на С++ в действии. Практика разработки многопоточных программ»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

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

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Параллельное программирование на С++ в действии. Практика разработки многопоточных программ», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

}

} catch(messaging::close_queue const&) {

}

}

messaging::sender get_sender() {

return incoming;

}

};

Листинг С.9.Конечный автомат пользовательского интерфейса

class interface_machine {

messaging::receiver incoming;

public:

void done() {

get_sender().send(messaging::close_queue());

}

void run() {

try {

for (;;) {

incoming.wait().handle (

[&](issue_money const& msg) {

{

std::lock_guard lk(iom);

std::cout << "Issuing "

<< msg.amount << std::endl;

}

}

).handle(

[&](display_insufficient_funds const& msg) {

{

std::lock_guard lk(iom);

std::cout << "Insufficient funds" << std::endl;

}

}

).handle(

[&](display_enter_pin const& msg) {

{

std::lock_guard lk(iom);

std::cout

<< "Please enter your PIN (0-9)" << std::endl;

}

}

).handle(

[&](display_enter_card const& msg) {

{

std::lock_guard lk(iom);

std::cout << "Please enter your card (I)"

<< std::endl;

}

}

).handle(

[&](display_balance const& msg) {

{

std::lock_guard lk(iom);

std::cout

<< "The balance of your account is "

<< msg.amount << std::endl;

}

}

).handle(

[&](display_withdrawal_options const& msg) {

{

std::lock_guard lk(iom);

std::cout << "Withdraw 50? (w)" << std::endl;

std::cout << "Display Balance? (b)"

<< std::endl;

std::cout << "Cancel? (c) " << std::endl;

}

}

).handle(

[&](display_withdrawal_cancelled const& msg) {

{

std::lock_guard lk(iom);

std::cout << "Withdrawal cancelled"

<< std::endl;

}

}

).handle(

[&](display_pin_incorrect_message const& msg) {

{

std::lock_guard lk(iom);

std::cout << "PIN incorrect" << std::endl;

}

}

).handle(

[&](eject_card const& msg) {

{

std::lock_guard lk(iom);

std::cout << "Ejecting card" << std::endl;

}

}

);

}

} catch (messaging::close_queue&) {

}

}

messaging::sender get_sender() {

return incoming;

}

};

Листинг С.10.Управляющая программа

int main() {

bank_machine bank;

interface_machine interface_hardware;

atm machine(bank.get_sender(), interface_hardware.get_sender());

std::thread bank_thread(&bank_machine::run, &bank);

std::thread if_thread(&interface_machine::run,

&interface_hardware);

std::thread atm_thread(&atm::run, &machine);

messaging::sender atmqueue(machine.get_sender());

bool quit_pressed = false;

while (!quit_pressed) {

char c = getchar();

switch(с) {

case '0':

case '1':

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9':

atmqueue.send(digit_pressed(с));

break;

case 'b':

atmqueue.send(balance_pressed());

break;

case 'w':

atmqueue.send(withdraw_pressed(50));

break;

case 'с':

atmqueue.send(cancel_pressed());

break;

case 'q':

quit_pressed = true;

break;

case 'i':

atmqueue.send(card_inserted("acc1234"));

break;

}

}

bank.done();

machine.done();

interface_hardware.done();

atm_thread.join();

bank_thread.join();

if_thread.join();

}

Приложение D

Справочник по библиотеке С++ Thread Library

D.1. Заголовок < chrono >

В заголовке объявлены классы для представления моментов времени, интервалов и часов, которые служат источником объектов time_point. В каждом классе часов имеется статическая переменная-член is_steady, показывающая, являются ли данные часы стабильными . Стабильными называются часы, которые ходят с постоянной частотой и не допускают подведения. Единственные гарантированно стабильные часы представлены классом std::chrono::steady_clock.

Содержимое заголовка

namespace std {

namespace chrono {

template<1>>

class duration;

template<

typename Clock,

typename Duration = typename Clock::duration>

class time_point;

class system_clock;

class steady_clock;

typedef unspecified-clock-type high_resolution_clock;

}

}

D.1.1. Шаблон класса std::chrono::duration

Шаблон класса s td::chrono::durationпредназначен для представления интервалов. Параметры шаблона Repи Period— это соответственно тип данных для хранения значения интервала и конкретизация шаблона класса std::ratio, которая задает промежуток времени (в виде долей секунды) между последовательными «тиками». Например, std::chrono::durationопределяет количество миллисекунд, представимое значением типа int, s td::chrono::duration<1, 50>> — количество пятидесятых долей секунды, представимое значением типа short, а std::chrono::duration<60, 1>> — количество минут, представимое значением типа long long.

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

Интервал:

Закладка:

Сделать

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

Представляем Вашему вниманию похожие книги на «Параллельное программирование на С++ в действии. Практика разработки многопоточных программ» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


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

Обсуждение, отзывы о книге «Параллельное программирование на С++ в действии. Практика разработки многопоточных программ» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x