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

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

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


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

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

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

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

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

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

4
Что делает метод потокобезопасным? Каковы правила?
Существуют ли общие правила / рекомендации для того, что делает метод потокобезопасным? Я понимаю, что, возможно, существует миллион разовых ситуаций, но что в целом? Это так просто? Если метод обращается только к локальным переменным, это потокобезопасно. Это оно? Это относится и к статическим методам? Один ответ, предоставленный @Cybis, был: Локальные …
156 c#  thread-safety 

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

5
Параллельный HashSet <T> в .NET Framework?
У меня есть следующий класс. class Test{ public HashSet&lt;string&gt; Data = new HashSet&lt;string&gt;(); } Мне нужно изменить поле «Данные» из разных потоков, поэтому я хотел бы высказать некоторые мнения о моей текущей поточно-безопасной реализации. class Test{ public HashSet&lt;string&gt; Data = new HashSet&lt;string&gt;(); public void Add(string Val){ lock(Data) Data.Add(Val); } public …

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

5
Являются ли несинхронизированные статические методы потокобезопасными, если они не изменяют статические переменные класса?
Мне было интересно, если у вас есть статический метод, который не синхронизируется, но не изменяет статические переменные, это потокобезопасно? А что, если метод создает локальные переменные внутри него? Например, является ли следующий код потокобезопасным? public static String[] makeStringArray( String a, String b ){ return new String[]{ a, b }; } …

4
Можно ли использовать экземпляр 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(); } public String toJson() { return gson.toJson(this); } public …

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.