ещё раз о параллельных словарях
Oct. 25th, 2007 08:46 amТут мы обсуждали задачку, которую я подбросил недавно интервьюируемому.
В общем виде задача такая - есть словарь, ключ->значение, и его модифицируют параллельно сто threadов, и надо, чтобы не мешали друг другу.
Ну, чтобы не мешали, значит, нужно что-то синхронизировать. То есть, регулировать доступ, то есть, применять Прокси Паттерн (шаблон, что ли?)
Вырисовалось два решения.
1. Промежуточный индекс, от ключа к "уникальному ключу", и основной индекс, от "уникального ключа" к значению.
2. в Dictionary хранить не собственно значения, а завернуть значения в transparent enclosure, и хранить, соответственно, этих представителей. Которые и должны блокировать одновременную модификацию.
Меня тут смущает одно - а если записи ещё нету - некоторые threads её создают, и другие тоже создают... сто threadов ломанутся создавать новую запись для одного и того же ключа. Что-то надо делать, а? А что?
В общем виде задача такая - есть словарь, ключ->значение, и его модифицируют параллельно сто threadов, и надо, чтобы не мешали друг другу.
Ну, чтобы не мешали, значит, нужно что-то синхронизировать. То есть, регулировать доступ, то есть, применять Прокси Паттерн (шаблон, что ли?)
Вырисовалось два решения.
1. Промежуточный индекс, от ключа к "уникальному ключу", и основной индекс, от "уникального ключа" к значению.
2. в Dictionary хранить не собственно значения, а завернуть значения в transparent enclosure, и хранить, соответственно, этих представителей. Которые и должны блокировать одновременную модификацию.
Меня тут смущает одно - а если записи ещё нету - некоторые threads её создают, и другие тоже создают... сто threadов ломанутся создавать новую запись для одного и того же ключа. Что-то надо делать, а? А что?