Хеш-таблица к Словарю <> syncroot.

Конечно:

FROM ubuntu:18.10

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && apt-get -y install --no-install-recommends --no-install-suggests \
        ca-certificates software-properties-common gnupg2 gnupg1 \
      && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 \
      && add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/' \
      && apt-get install r-base 

Взяты отсюда: https://cran.r-project.org/bin/linux/ubuntu/README.html

[ 116] И здесь: https://github.com/noisebrain/Dockerfiles/blob/0668df74b27f514dab19a7afae6715328de72980/Rstudio-server-aib/rstudio-server-aib.dockerfile

root@100d1cda7377:/# R

R version 3.5.2 (2018-12-20) -- "Eggshell Igloo"

11
задан Jason Plank 1 November 2011 в 19:47
поделиться

4 ответа

Если Вы идете строго для совместимости затем, Bryan корректен. Это - лучший способ поддержать Вашу текущую семантику сверху Словаря.

Подробно останавливаясь на нем все же. Причина свойство SyncRoot не было непосредственно добавлено к универсальному словарю, состоит в том, что это - опасный способ сделать синхронизацию. Это только немного лучше, чем "блокировка (это)", которое очень опасно и подвержено мертвым блокировкам. Вот несколько ссылок, которые говорят с тем, почему это плохо.

12
ответ дан 3 December 2019 в 03:37
поделиться

Новое мышление позади SyncRoot - то, что это была ошибка в первоначальном проекте. Если единственной вещью заблокировать является словарь, и это является частным, можно заблокировать его или другой объект, который служит объектом синхронизации. Последняя техника полезна, когда состояние, которое Вы защищаете, является больше, чем просто словарь.

// used as you would have used SyncRoot before
object _syncLock = new object();
Dictionary<string, int> numberMapper = new Dictionary<string, int>();

// in some method...
lock (_syncLock)
{
    // use the dictionary here.
}
7
ответ дан 3 December 2019 в 03:37
поделиться
var dictionary = new Dictionary<int, string>();

lock(((ICollection) dictionary).SyncRoot)
{
    // ...
}
5
ответ дан 3 December 2019 в 03:37
поделиться

Если хеш-таблица/словарь не общедоступна, Вы могли бы просто заблокировать сам объект словаря.

3
ответ дан 3 December 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: