Вопросы с тегом «thread-safety»

Фрагмент кода является потокобезопасным, если он управляет структурами данных только таким образом, чтобы обеспечить согласованное выполнение этого кода несколькими потоками. Код может быть потокобезопасным, условно безопасным (требуется взаимное исключение) или небезопасным (может безопасно использоваться только одним потоком).

911
Коллекция была изменена; операция перечисления может не выполняться

Я не могу докопаться до этой ошибки, потому что, когда отладчик подключен, кажется, что это не происходит. Ниже приведен код. Это сервер WCF в службе Windows. Метод NotifySubscribeers вызывается службой всякий раз, когда происходит событие данных (через случайные интервалы, но не очень часто -...

527
Как работает блокировка?

Я вижу, что для использования объектов, которые не являются потокобезопасными, мы заключаем код в блокировку следующим образом: private static readonly Object obj = new Object(); lock (obj) { // thread unsafe code } Так что же происходит, когда несколько потоков обращаются к одному и тому же коду...

253
Варианты использования для планировщиков RxJava

В RxJava есть 5 разных планировщиков на выбор: немедленный () : создает и возвращает планировщик, который выполняет работу немедленно в текущем потоке. trampoline () : создает и возвращает планировщик, который ставит в очередь работу в текущем потоке, который будет выполнен после завершения текущей...

198
Что именно является реентерабельной функцией?

Большинство из тех времен , определение reentrance цитата из Википедии : Компьютерная программа или рутина описываются как повторно входящие, если это может быть безопасно снова до того, как ее предыдущий вызов был завершен (то есть ее можно безопасно выполнить одновременно). Для повторного входа,...

191
Java синхронизирует метод блокировки объекта или метода?

Если у меня есть 2 синхронизированных метода в одном и том же классе, но каждый имеет доступ к разным переменным, могут ли 2 потока получить доступ к этим двум методам одновременно? Происходит ли блокировка объекта или он становится таким же специфичным, как переменные внутри синхронизированного...

181
Queue.Queue vs. Коллекции.deque

Мне нужна очередь, в которую может помещаться несколько потоков, и из которых могут считываться несколько потоков. В Python есть как минимум два класса очереди, Queue.Queue и collection.deque, причем первый, по-видимому, использует второй для внутреннего использования. Оба утверждают, что они...

179
Автоматизация шаблона кода InvokeRequired

Я стал мучительно осознавать, как часто нужно писать следующий шаблон кода в коде GUI, управляемого событиями, где private void DoGUISwitch() { // cruisin for a bruisin' through exception city object1.Visible = true; object2.Visible = false; } будет выглядеть так: private void DoGUISwitch() { if...

156
Итерация значений ConcurrentHashMap потокобезопасна?

В javadoc для ConcurrentHashMap есть следующее: Операции извлечения (включая get) обычно не блокируются, поэтому могут перекрываться с операциями обновления (включая put и remove). Извлечения отражают результаты самых последних завершенных операций обновления, проводимых с момента их появления. Для...

156
Что делает метод потокобезопасным? Каковы правила?

Существуют ли общие правила / рекомендации для того, что делает метод потокобезопасным? Я понимаю, что, возможно, существует миллион разовых ситуаций, но что в целом? Это так просто? Если метод обращается только к локальным переменным, это потокобезопасно. Это оно? Это относится и к статическим...

152
Параллельный HashSet <T> в .NET Framework?

У меня есть следующий класс. class Test{ public HashSet<string> Data = new HashSet<string>(); } Мне нужно изменить поле «Данные» из разных потоков, поэтому я хотел бы высказать некоторые мнения о моей текущей поточно-безопасной реализации. class Test{ public HashSet<string> Data =...

147
C # Thread Safe быстрый (EST) счетчик

Как получить потокобезопасный счетчик в C # с наилучшей производительностью? Это так просто, как получается: public static long GetNextValue() { long result; lock (LOCK) { result = COUNTER++; } return result; } Но есть ли более быстрые...

145
Являются ли несинхронизированные статические методы потокобезопасными, если они не изменяют статические переменные класса?

Мне было интересно, если у вас есть статический метод, который не синхронизируется, но не изменяет статические переменные, это потокобезопасно? А что, если метод создает локальные переменные внутри него? Например, является ли следующий код потокобезопасным? public static String[] makeStringArray(...

143
Можно ли использовать экземпляр Gson в качестве статического поля в компоненте модели (повторное использование)?

Вот модель, которую я реализовал: public class LoginSession { private static final Gson gson = new Gson(); private String id; private String name; private long timestamp; public LoginSession(String id, String name) { this.id = id; this.name = name; this.timestamp = System.currentTimeMillis(); }...

140
Безопасна ли! = Проверка потоков?

Я знаю, что составные операции, например i++, не являются потокобезопасными, поскольку включают в себя несколько операций. Но является ли проверка ссылки на самой себе поточно-ориентированной операцией? a != a //is this thread-safe Я пытался запрограммировать это и использовать несколько потоков,...

125
Что означает потокобезопасность?

Недавно я попытался получить доступ к текстовому полю из потока (кроме потока пользовательского интерфейса), и возникло исключение. В нем что-то говорилось о том, что «код не является потокобезопасным», и поэтому я написал делегат (помог образец из MSDN) и вместо этого вызвал его. Но даже в этом...

123
Поточно-ориентированное свойство List <T>

Мне нужна реализация List<T>as свойства, которое можно без сомнения использовать поточно. Что-то вроде этого: private List<T> _list; private List<T> MyT { get { // return a copy of _list; } set { _list = value; } } Кажется, мне все еще нужно вернуть копию (клонированную)...

109
Как лучше всего реализовать потокобезопасный словарь?

Мне удалось реализовать потокобезопасный словарь на C #, унаследовав его от IDictionary и определив частный объект SyncRoot: public class SafeDictionary<TKey, TValue>: IDictionary<TKey, TValue> { private readonly object syncRoot = new object(); private Dictionary<TKey, TValue> d =...