Описание тега memory-visibility
2
ответа
Изменчивые переменные и другие переменные
Следующее из классической Concurency in Practice: Когда поток A записывает в переменную volatile и впоследствии поток B читает ту же самую переменную, значения всех переменных, которые были видны A до записи в переменную volatile, становятся видимым…
15 сен '12 в 15:05
1
ответ
С ++11 атомика. visibility и thread.join() / правильный способ остановить поток
За что (если есть?) STORE_ORDER & LOAD_ORDER C++11 гарантирует, что этот код выполняется за конечное время? std::atomic<bool> a{false}; std::thread t{[&]{ while(!a.load(LOAD_ORDER)); }}; a.store(true, STORE_ORDER); t.join(); Я вижу две про…
15 фев '19 в 15:36
3
ответа
Volatile массив - видимость элементов памяти
Рассмотрим фрагмент кода class A { private Map<String, Object> taskMap = new HashMap<>(); private volatile Object[] tasksArray ; // assume this happens on thread1 public void assignTasks() { synchronized(taskMap){ // put new tasks into m…
23 июн '14 в 19:52
5
ответов
Несинхронизированное чтение целочисленного потока безопасно в Java?
Я вижу этот код довольно часто в некоторых модульных тестах OSS, но безопасен ли он для потоков? Гарантирован ли цикл while правильное значение invoc? Если нет; ботаник указывает на того, кто знает, на какой архитектуре ЦП это может произойти. priva…
04 авг '11 в 20:43
1
ответ
Использование volatile для обеспечения видимости общих (но не одновременных) данных в Java
Я пытаюсь реализовать быструю версию LZ77, и у меня есть вопрос к параллельному программированию. Сейчас у меня есть final byte[] buffer и final int[] resultHolderоба одинаковой длины. Программа делает следующее: Основной поток записывает весь буфер…
22 апр '14 в 13:20
0
ответов
Как продемонстрировать проблемы видимости памяти в Go?
Я делаю презентацию о модели памяти Go. Модель памяти гласит, что без отношения "до и после" между записью в одной процедуре и чтением в другой, нет никакой гарантии, что читатель увидит это изменение. Чтобы оказать большее влияние на аудиторию, вме…
20 янв '19 в 23:42
3
ответа
Java ConcurrentHashMap.computeIfPresent видимость изменения значения
Допустим, у меня есть параллельная карта со значениями коллекций: Map<Integer, List<Integer> map = new ConcurrentHashMap<>(); map.putIfAbsent(8, new ArrayList<>()); и я обновляю значение следующим образом: map.computeIfPresent(8…
30 сен '18 в 11:39
1
ответ
Действительно ли изменчивая ссылка действительно гарантирует, что внутреннее состояние объекта видимо другим потокам?
Читая "Параллелизм Java на практике", я обнаружил следующее: Чтобы безопасно опубликовать объект, и ссылка на объект, и состояние объекта должны быть видны другим потокам одновременно. Правильно сконструированный объект может быть безопасно опублико…
24 мар '16 в 13:03
7
ответов
Разделяются ли статические переменные между потоками?
Мой учитель на уроках Java по верхнему уровню сказал что-то, в чем я не был уверен. Он заявил, что следующий код не обязательно обновит ready переменная. По его словам, два потока не обязательно совместно используют статическую переменную, особенно …
08 фев '11 в 15:25
2
ответа
Java Concurrent Коллекции и видимость
Я немного не уверен, что ожидать от Concurrent Collections (например, ConcurrentMap) в отношении видимости данных в коллекции. A: Thread1 помещает сложный объект, а Thread2 получает его. Все ли атрибуты будут видны в теме 2? B: Thread1 помещает слож…
15 янв '15 в 22:25
1
ответ
Если Поток B хочет видеть изменения, которые вносит Поток A, может ли только последнее изменение быть изменчивой переменной в отличие от всех?
Я посмотрел на этот ответ, и он утверждает, как: Согласно новой модели памяти, когда поток A записывает в энергозависимую переменную V, а поток B читает из V, любые значения переменных, которые были видны A во время записи V, теперь гарантированно б…
26 сен '18 в 03:51
2
ответа
Гарантируют ли атомарные переменные видимость памяти?
Небольшой вопрос о видимости памяти. CodeSample1: class CustomLock { private boolean locked = false; public boolean lock() { if(!locked) { locked = true; return true; } return false; } } Этот код склонен к ошибкам в многопоточной среде, во-первых, и…
17 мар '17 в 22:39
3
ответа
Неинициализированный объект просочился в другой поток, несмотря на отсутствие явного утечки кода?
Давайте посмотрим на эту простую Java-программу: import java.util.*; class A { static B b; static class B { int x; B(int x) { this.x = x; } } public static void main(String[] args) { new Thread() { void f(B q) { int x = q.x; if (x != 1) { System.out…
23 апр '13 в 19:54
0
ответов
Spring и Java видимость
В последнее время наша система испытывает все виды Spring, связанные с "вуду". Обычно это выглядит примерно так: Различные одноэлементные bean-компоненты имеют свойства (ctor) autowired, на основе которых они создают некоторые внутренние структуры д…
18 июн '17 в 15:24
2
ответа
Обеспечение видимости памяти с помощью компоновщика / фабричного шаблона
Следующий класс: class Pizza { Ingredients ingredients; Price price; public setIngredients(Ingredients ing) { if (ingredients != null) { throw new IllegalStateException(); } ingredients = ing; return this; } public setPrice(Price p) { if (price != n…
21 мар '11 в 10:59
2
ответа
Гарантирует ли BackgroundWorker, что изменения памяти, сделанные в фоновом потоке, становятся видимыми для основного потока?
Если я использую BackgroundWorker для изменения структур данных в моем приложении, есть ли гарантия, что изменения, внесенные в фоновый поток, будут видны основному (UI) потоку после завершения BackgroundWorker (например, в обработчике событий RunWo…
14 ноя '14 в 18:00
0
ответов
Безопасны ли операции перед Thread.start() по отношению к новому потоку?
Существуют ли какие-либо гарантии для переменной видимости и / или порядка инструкций перед Thread.start() по отношению к началу новой темы? В частности, в приведенном ниже минималистическом примере я прав, предполагая, что var должно быть volatile …
30 май '17 в 10:30
2
ответа
Почему эта простая многопоточная программа застревает?
Взгляните на эту простую Java-программу: import java.lang.*; class A { static boolean done; public static void main(String args[]) { done = false; new Thread() { public void run() { try { Thread.sleep(1000); // dummy work load } catch (Exception e) …
01 апр '13 в 22:51
2
ответа
Основной поток случайно не достигает конца (пытаясь суммировать натуральные числа в параллельных потоках)
У меня есть следующий код, чтобы найти сумму натуральных чисел от 1 до 5000. Это простое упражнение для практики параллелизма. public static void main(String[] args) throws InterruptedException { final int[] threadNb = new int[] {5}; final Integer[]…
11 сен '15 в 12:23
3
ответа
Нужно ли летучее?
Если у меня есть очередь байтов, где, как ожидается, будет один производитель потока, другой потребитель: class ByteQueue{ byte[] buf; /*volatile?*/ int readIdx; /*volatile?*/ int writeIdx; Runnable writeListener; Runnable readListener; // ... void …
30 июн '15 в 18:55