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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

std::string account;

mutable messaging::sender atm_queue;

get_balance(

std::string const& account_, messaging::sender atm_queue_):

account(account_), atm_queue(atm_queue_) {}

};

struct balance {

unsigned amount;

explicit balance(unsigned amount_):

amount(amount_) {}

};

struct display_balance {

unsigned amount;

explicit display_balance(unsigned amount_):

amount(amount_) {}

};

struct balance_pressed {};

Листинг С.7.Конечный автомат банкомата

class atm {

messaging::receiver incoming;

messaging::sender bank;

messaging::sender interface_hardware;

void (atm::*state)();

std::string account;

unsigned withdrawal_amount;

std::string pin;

void process_withdrawal() {

incoming.wait().handle(

[&](withdraw_ok const& msg) {

interface_hardware.send(

issue_money(withdrawal_amount));

bank.send(

withdrawal_processed(account, withdrawal_amount));

state = &atm::done_processing;

}

).handle(

[&](withdraw_denied const& msg) {

interface_hardware.send(display_insufficient_funds());

state = &atm::done_processing;

}

).handle(

[&](cancel_pressed const& msg) {

bank.send(

cancel_withdrawal(account, withdrawal_amount));

interface_hardware.send(

display_withdrawal_cancelled());

state = &atm::done_processing;

}

);

}

void process_balance() {

incoming.wait().handle(

[&](balance const& msg) {

interface_hardware.send(display_balance(msg.amount));

state = &atm::wait_for_action;

}

).handle(

[&](cancel_pressed const& msg) {

state = &atm::done_processing;

}

);

}

void wait_for_action() {

interface_hardware.send(display_withdrawal_options());

incoming.wait().handle(

[&](withdraw_pressed const& msg) {

withdrawal_amount = msg.amount;

bank.send(withdraw(account, msg.amount, incoming));

state = &atm::process_withdrawal;

}

).handle(

[&](balance_pressed const& msg) {

bank.send(get_balance(account, incoming));

state = &atm::process_balance;

}

).handle(

[&](cancel_pressed const& msg) {

state = &atm::done_processing;

}

);

}

void verifying_pin() {

incoming.wait().handle(

[&](pin_verified const& msg) {

state = &atm::wait_for_action;

}

).handle(

[&](pin_incorrect const& msg) {

interface_hardware.send(

display_pin_incorrect_message());

state = &atm::done_processing;

}

).handle(

[&](cancel_pressed const& msg) {

state = &atm::done_processing;

}

);

}

void getting_pin() {

incoming.wait().handle(

[&](digit_pressed const& msg) {

unsigned const pin_length = 4;

pin += msg.digit;

if (pin.length() == pin_length) {

bank.send(verify_pin(account, pin, incoming));

state = &atm::verifying_pin;

}

}

).handle(

[&](clear_last_pressed const& msg) {

if (!pin.empty()) {

pin.pop_back();

}

}

).handle(

[&](cancel_pressed const& msg) {

state = &atm::done_processing;

}

);

}

void waiting_for_card() {

interface_hardware.send(display_enter_card());

incoming.wait().handle(

[&](card_inserted const& msg) {

account = msg.account;

pin = "";

interface_hardware.send(display_enter_pin());

state = &atm::getting_pin;

}

);

}

void done_processing() {

interface_hardware.send(eject_card());

state = &atm::waiting_for_card;

}

atm(atm const&) = delete;

atm& operator=(atm const&) = delete;

public:

atm(messaging::sender bank_,

messaging::sender interface_hardware_):

bank(bank_), interface_hardware(interface_hardware_) {}

void done() {

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

}

void run() {

state = &atm::waiting_for_card;

try {

for (;;) {

(this->*state)();

}

} catch(messaging::close_queue const&) {

}

}

messaging::sender get_sender() {

return incoming;

}

};

Листинг С.8.Конечный автомат банка

class bank_machine {

messaging::receiver incoming;

unsigned balance;

public:

bank_machine():

balance(199) {}

void done() {

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

}

void run() {

try {

for (;;) {

incoming.wait().handle(

[&](verify_pin const& msg) {

if (msg.pin == "1937") {

msg.atm_queue.send(pin_verified());

} else {

msg.atm_queue.send(pin_incorrect());

}

}

).handle(

[&](withdraw const& msg) {

if (balance >= msg.amount) {

msg.atm_queue.send(withdraw_ok());

balance -= msg.amount;

} else {

msg.atm_queue.send(withdraw_denied());

}

}

).handle(

[&](get_balance const& msg) {

msg.atm_queue.send(::balance(balance));

}

).handle(

[&](withdrawal_processed const& msg) {

}

).handle(

[&](cancel_withdrawal const& msg) {

}

);

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

Интервал:

Закладка:

Сделать

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

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


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

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

x