Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094

Асинхронный доступ к массиву

28.08.2019, 17:42. Показов 1580. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый!

Как организовать асинхронный доступ к массиву, который будет использоваться только для чтения из разных потоков?
Не будет-ли в этом случае излишним:

C#
1
2
3
4
5
var i = 0;
lock(sincObject)
{
     i = array[index]
}
Меня в частности волнует: насколько корректно отработает одновременное обращение к одному и тому же элементу массива?

Является-ли хорошей практикой программирования использовать массив для описанной выше ситуации?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.08.2019, 17:42
Ответы с готовыми решениями:

Асинхронный доступ к статическим данным
Всем привет. Ситуация такая: Есть асинхронные методы которые используют общие static данные (к примеру List/Dictionary). Какие есть у .NET...

Получить доступ к массиву
Есть две кнопки, одна кнопка при нажатии создает и заполняет массив, а при нажатии второй требуется отсортировать введенный массив и...

Доступ к массиву из разных методов
У меня такой вопрос: у меня имеется в button1 массив, в этом button1 я обрабатываю массив и присваиваю элементам значения(не суть, как и...

7
91 / 65 / 18
Регистрация: 09.12.2015
Сообщений: 207
28.08.2019, 17:56
Если только читать, то проблем быть не должно.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
28.08.2019, 18:17
Цитата Сообщение от _katon_ Посмотреть сообщение
Не будет-ли в этом случае излишним
Если без изменения элементов, то будет излишним.
1
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
28.08.2019, 18:17
Цитата Сообщение от _katon_ Посмотреть сообщение
организовать асинхронный доступ
асинхронный и параллельный не одно и то же, определитесь
Цитата Сообщение от _katon_ Посмотреть сообщение
только для чтения
просто читайте, чтение безвредно
Цитата Сообщение от _katon_ Посмотреть сообщение
sincObject
это объект раковины, syncObject будет синхронизации)
1
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
28.08.2019, 20:06  [ТС]
Во-первых всем спасибо за ответы.

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

Почему я не говорю "параллельный"? Потому, что рассматриваю исполняющийся код с точки зрения выполнения его в отдельном потоке абстрагируясь от его возможного выполнения в других параллельных потоках. Меня не волнует, что делают параллельные потоки, т.к. сейчас рассматривается проблема доступа к разделяемому ресурсу из вызова выполненного асинхронно.

Не считаю правильным выбирать между асинхронным и параллельным, т.к. исходя из всего вышеизложенного параллельный доступ к ресурсу может быть как асинхронный (без lock, например) так и синхронным (c lock).
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
28.08.2019, 21:15
Цитата Сообщение от _katon_ Посмотреть сообщение
Асинхронный - вызов не блокирующей операции, которая сразу же передает управление вызывающему потоку
все так
Цитата Сообщение от _katon_ Посмотреть сообщение
Асинхронный доступ (в данном случае к ресурсу) - доступ без блокирования ресурса (в данном случае чтение)
первый раз слышу понятие "асинхронный доступ" не в значении асинхронного вызова. это вы так решили называть или есть какой-то ресурс, который дает такое определение?
Цитата Сообщение от _katon_ Посмотреть сообщение
Почему я не говорю "параллельный"? Потому, что рассматриваю исполняющийся код с точки зрения выполнения его в отдельном потоке абстрагируясь от его возможного выполнения в других параллельных потоках. Меня не волнует, что делают параллельные потоки, т.к. сейчас рассматривается проблема доступа к разделяемому ресурсу из вызова выполненного асинхронно.
согласен, параллельный не очень точный термин, одновременный доступ пожалуй точнее будет
Цитата Сообщение от _katon_ Посмотреть сообщение
может быть как асинхронный (без lock, например) так и синхронным (c lock).
синхронный - асинхронный. Это про блокировку вызывающего потока
синхронизированный - не синхронизированный. это про доступ: наличие/отсутствие какой либо синхронизации (например лок)

Ну по крайней мере я так понимаю русскоязычную терминологию. Могу ошибаться, конечно)
2
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
28.08.2019, 23:24  [ТС]
1. Асинхронный доступ.
Я нашел Троелсена :"Язык программирования С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание". Там есть заголовок "Асинхронный доступ к данным в .NET 2.0" (Глава 22). Насколько я понял (в 10 часов вечера), то термин можно разъяснить как доступ к данным (тут все понятно) из асинхронного вызова. Конкретно там речь идет о доступе к БД.
По идее название топика должно отражать суть проблематики. Получается не вводящий никого в заблуждение топик должен звучать приблизительно так: "Безопасный доступ к массиву из асинхронного вызова".
2.синхронный/синхронизированный.
Тут я не прав. И в общем я конечно нагородил ерунды про lock объединив два этих термина в один.
3.параллельный/одновременный
Я не говорю что эти термины не применимы к моей ситуации. Просто считаю (возможно ошибочно), что говоря о параллельности "загрязняю" описание сути проблемы лишними деталями.
1
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
28.08.2019, 23:47
Цитата Сообщение от _katon_ Посмотреть сообщение
Там есть заголовок "Асинхронный доступ к данным в .NET 2.0"
в котором как раз говорится, как сделать асинхронный вызов и ни слова про синхронизацию. в общем разобрались я думаю
Цитата Сообщение от _katon_ Посмотреть сообщение
топик должен звучать приблизительно так
да и так в принципе понятно, просто надо же убедиться, что это не непонимание концепций.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.08.2019, 23:47
Помогаю со студенческими работами здесь

Доступ к массиву другого класса
В 1 классе есть матрица. Я хочу сделать копию данной матрицы во 2й класс. Как это сдлеать правильно? 1й класс public class Graph ...

доступ к массиву из другого класса
Всем привет. Чета не пойму как сделать такое: есть класс Form1.cs(при создании), добавил новый класс newclass.cs и в нем выпоняются...

Создание и доступ к массиву по его имени
Не знаю, правильно ли я сформулировал заголовок темы, но суть такова. Необходимо запросить у пользователя строку (Console.ReadLine),...

Получить доступ к динамическому массиву из других классов
существует такой динамический массив class Program { static void Main(string args) { List...

По двумерному массиву массиву А получить одномерный массив В, присвоив его k-му элементу значение TRUE
По двумерному массиву массиву А получить одномерный массив В, присвоив его k-му элементу значение TRUE, если выполнено указанное ниже...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru