Читаем Rust на примерах полностью

// TODO: попробуйте удалить 'move' и посмотреть что получится

children.push(thread::spawn(move || -> u32 {

// Вычислим промежуточную сумму этого сегмента:

let result = data_segment

// итерируемся по символам этого сегмента..

.chars()

// .. преобразуем текстовые символы в их числовые значения..

.map(|c| c.to_digit(10).expect("должно быть числом"))

// .. и суммируем получившийся итератор из чисел

.sum();

// `println!` блокирует стандартный вывод, так что чередования текста не происходит

println!("обработан сегмент {}, result={}", i, result);

// "return" не обязателен, так как Rust "язык выражений" и

// последнее выполненное выращение в каждом блоке автоматически становится значением этого блока.

result

}));

}

/*************************************************************************

* Фаза "Reduce"

*

* Собираем наши промежуточные значения и объединяем их в конечные результат

************************************************************************/

// собираем промежуточный результат каждого потока в новый вектор

let mut intermediate_sums = vec![];

for child in children {

// собираем возвращаемое значение каждого дочернего потока

let intermediate_sum = child.join().unwrap();

intermediate_sums.push(intermediate_sum);

}

// Объединяем все промежуточные суммы в одну конечную сумму.

//

// Мы используем "turbofish" `::<>` чтобы подсказать `sum()` тип.

//

// TODO: попробуйте без turbofish, явно указывая тип final_result

let final_result = intermediate_sums.iter().sum::();

println!("Финальная сумма: {}", final_result);

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="Назначения"><strong><a l:href="#Назначения">Назначения</a></strong></p>

Не стоит позволять числу наших потоков быть зависимом от введённых пользователем данных. Что если пользователь решит вставить много пробелов? Мы действительно хотим создать 2000 потоков? Измените программу так, чтобы данные разбивались на ограниченное число блоков, объявленных статической константой в начале программы.

<p id="Смотрите_также_67"><strong><a l:href="#Смотрите_также_67">Смотрите также:</a></strong></p>

   • Потоки

   • вектора и итераторы

   • замыкания, семантика передачи владения и перемещения (move) в замыканиях

   • деструктуризация при присвоениях

   • нотация turbofish в помощь механизму вывода типов

   • unwrap или expect

   • перечисления

<p id="Каналы"><strong><a l:href="#Каналы">Каналы</a></strong></p>

Rust предоставляет асинхронные каналы (channel) для взаимодействия между потоками. Каналы обеспечивают однонаправленную передачу информации между двумя конечными точками: отправителем (Sender) и получателем (Receiver).

Перейти на страницу:

Похожие книги

Писать нельзя молчать
Писать нельзя молчать

Неужели ты опять отложишь мечту – написать книгу? Опять занят и считаешь затею глупостью? А ведь чтобы сотворить историю нужно совсем немного: капелька поддержки на старте, чуток теории в процессе и безудержная энергия творчества, которую я помогу тебе разбудить. Или вспомнить.Мир живёт историями, и каждый может стать увлекательным рассказчиком. В этой книге я дам ответы на самые животрепещущие вопросы писателя-новичка. Эта книга для тех, кто:• Хочет писать истории, но откладывает дело в долгий ящик;• Писал раньше, но разуверился в своих силах;• Боится показаться глупым мечтателем в глазах близких;• Боится совершить ошибки;• Просто застрял и не знает, как воплотить свою идею;• Давно пишет, но не может довести до конца ни одну историю;• Не знает, как найти свою аудиторию, как с ней общаться;• Хочет почерпнуть вдохновение от общения с коллегой по писательскому делу.Эта книга написана без лишнего пафоса и с конкретными шагами на внедрение. Все, что остается, это сесть поудобнее и приступить к чтению.В формате PDF A4 сохранен издательский макет книги.

Юрий Михайлович Окунев , Юрий Окунев

Хобби и ремесла / Учебные пособия, самоучители / Дом и досуг