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 revision | ||
courses:high_performance_computing:coroutines_map [2020/06/02 14:02] – odoronin | courses:high_performance_computing:coroutines_map [2020/06/08 00:58] (current) – odoronin | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Coroutines Map ====== | ====== Coroutines Map ====== | ||
- | Необходимо реализовать следующий интерфейс lock-free map в стиле | + | Необходимо реализовать следующий интерфейс lock-free map в стиле |
<code java> | <code java> | ||
- | public interface | + | public interface |
/** | /** | ||
- | * Добавить (key,value) к ассоциативному контейнеру | + | * Добавить (key,value) к ассоциативному контейнеру. Если key уже существует, |
* | * | ||
- | * Алгоритм должен быть как минимум lock-free | + | * Алгоритм должен быть как минимум lock-free. |
* | * | ||
* @param key ключ | * @param key ключ | ||
Line 16: | Line 16: | ||
suspend fun put(key: K, value: V) : V? | suspend fun put(key: K, value: V) : V? | ||
+ | /** | ||
+ | * Проверка наличия ключа в множестве | ||
+ | * | ||
+ | * Алгоритм должен быть как минимум wait-free для типов конечной размерноости и lock-free для остальных | ||
+ | * | ||
+ | * @param key значение ключа | ||
+ | * @return значение если элемент содержится в множестве, | ||
+ | */ | ||
suspend fun get(key: K) : V? | suspend fun get(key: K) : V? | ||
Line 39: | Line 46: | ||
/** | /** | ||
- | * Возвращает lock-free Set элементов для ассоциативного контейнера | + | * Возвращает lock-free |
* | * | ||
- | * @return новый экземпляр Set для ассоциативного контейнера | + | * @return новый экземпляр Set для ассоциативного контейнера. Возвращается полная не изменяемая копия |
*/ | */ | ||
suspend fun entrySet(): Set< | suspend fun entrySet(): Set< | ||
} | } | ||
</ | </ | ||
+ | |||
+ | В работе можно использовать только JDK 11 и язык программирования Kotlin. Имя класса реализации CoroutinesMapImpl. В работе нужно доработать lock-free-set из прошлой работы до map и использовать как вложенное поле в CoroutinesMapImpl. Если ваш lock-free-set был написан на java, то можно его импортировать как java файл и доработать до map тоже на языке java, но реализацию CoroutinesMapImpl нужно уже писать на 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.1591095741.txt.gz · Last modified: 2020/06/02 14:02 by odoronin