courses:high_performance_computing:coroutines_map
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
courses:high_performance_computing:coroutines_map [2020/06/02 14:21] – odoronin | courses:high_performance_computing:coroutines_map [2020/06/05 05:33] – odoronin | ||
---|---|---|---|
Line 6: | Line 6: | ||
public interface CoroutinesMap< | public interface CoroutinesMap< | ||
/** | /** | ||
- | * Добавить (key,value) к ассоциативному контейнеру | + | * Добавить (key,value) к ассоциативному контейнеру. Если key уже существовал, |
* | * | ||
- | * Алгоритм должен быть как минимум lock-free | + | * Алгоритм должен быть как минимум lock-free. |
* | * | ||
* @param key ключ | * @param key ключ | ||
Line 19: | Line 19: | ||
* Проверка наличия ключа в множестве | * Проверка наличия ключа в множестве | ||
* | * | ||
- | * Алгоритм должен быть как минимум wait-free | + | * Алгоритм должен быть как минимум wait-free |
* | * | ||
* @param key значение ключа | * @param key значение ключа | ||
Line 46: | Line 46: | ||
/** | /** | ||
- | * Возвращает lock-free Set элементов для ассоциативного контейнера | + | * Возвращает lock-free |
* | * | ||
- | * @return новый экземпляр Set для ассоциативного контейнера | + | * @return новый экземпляр Set для ассоциативного контейнера. Возвращается полная не изменяемая копия |
*/ | */ | ||
suspend fun entrySet(): Set< | suspend fun entrySet(): Set< | ||
Line 54: | Line 54: | ||
</ | </ | ||
- | Имя класса реализации CoroutinesMapImpl. | + | В работе можно использовать только JDK 11 и язык программирования Kotlin. |
+ | |||
+ | * В работе должны быть тесты только на работу с корутинами | ||
+ | * Запрещено использовать asCoroutineDispatcher | ||
+ | * Задачи нужно отправлять через submit в Exectuors.fixedThreadPool, | ||
+ | |||
+ | При использовании async действия должны выполняться асинхронно | ||
+ | <code java> | ||
+ | val m = CoroutinesMapImpl< | ||
+ | runBlocking { | ||
+ | val a = async { m.put(" | ||
+ | val b = async { m.put(" | ||
+ | print(a.await()); | ||
+ | print(b.await()); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Если не использовать async, то каждое действие будет блокироваться до получения результата | ||
+ | <code java> | ||
+ | val m = CoroutinesMapImpl< | ||
+ | runBlocking { | ||
+ | val a = m.put(" | ||
+ | val b = m.put(" | ||
+ | print(a); | ||
+ | print(b); | ||
+ | } | ||
+ | </ | ||
courses/high_performance_computing/coroutines_map.txt · Last modified: 2020/06/08 00:58 by odoronin