|
12 / 12 / 1
Регистрация: 18.06.2011
Сообщений: 435
|
|
Потоки: синхронизированный доступ к стеку21.02.2012, 22:24. Показов 2869. Ответов 21
Метки нет (Все метки)
в общем на картинке все нарисовано. Количество потоков нарисовал два, но на самом деле их может быть больше
0
|
|
| 21.02.2012, 22:24 | |
|
Ответы с готовыми решениями:
21
Перегрузка WebClient.GetRequest() и передача исключения вверх по стеку
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 22.02.2012, 01:03 | |
|
В чем вопрос-то заключается?
Если нужен синхронизированный доступ к стеку, используйте BlockingCollection.
0
|
|
|
12 / 12 / 1
Регистрация: 18.06.2011
Сообщений: 435
|
|
| 22.02.2012, 01:17 [ТС] | |
|
Под стеком я имел в виду простейший массив List
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||
| 22.02.2012, 10:25 | ||||||
|
Тогда используйте обычную синхронизацию через lock:
Но для начала пойдет и так.
1
|
||||||
|
12 / 12 / 1
Регистрация: 18.06.2011
Сообщений: 435
|
|||||||||||
| 22.02.2012, 12:29 [ТС] | |||||||||||
0
|
|||||||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 22.02.2012, 12:44 | |
|
Я не совсем понимаю что делает ваш код (точнее, не знаю что происходит в методе GetEasylabViews), но уже вижу проблему: вы замыкаете весь цикл. Зачем?
В результате у вас все потоки будут работать по порядку: пока один работает, другие ждут его завершения. Старайтесь максимально минимизировать время, затрачиваемое на обработку критической зоны. То есть замыкайте только ту часть кода, где непосредственно происходит доступ к общему ресурсу. Если в вашем случае общий ресурс - список чего-то, то замыкайте только ту часть кода, где происходит обращение к его свойствам или методам. Чем меньше критическая зона, тем производительнее многопоточное приложение.
0
|
|
|
12 / 12 / 1
Регистрация: 18.06.2011
Сообщений: 435
|
||||||
| 22.02.2012, 12:52 [ТС] | ||||||
0
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 22.02.2012, 13:14 | |
|
Я вообще не вижу никакого обращения к общим ресурсам, кроме записи в текстовое поле. Но запись все равно маршаллится в основной поток, так что синхронизировать ее не нужно.
И замените textBox2.Text += Environment.NewLine на textBox2.AppendText(Environment.NewLine) , а то сводите на нет использование этого метода в предыдущей строчке.
0
|
|
|
12 / 12 / 1
Регистрация: 18.06.2011
Сообщений: 435
|
|
| 22.02.2012, 13:16 [ТС] | |
|
kolorotur, то есть многопоточность не имеет смысла?
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 22.02.2012, 13:19 | |
|
Многопоточность смысл имеет. Не имеет смысла синхронизация (блок lock), так как отсутствует обращение к общим ресурсам, а следовательно и повод для race condition (как оно по-русски правильно называется?).
0
|
|
|
12 / 12 / 1
Регистрация: 18.06.2011
Сообщений: 435
|
|
| 22.02.2012, 13:50 [ТС] | |
|
kolorotur, а как быть с другой проблемой? Когда до конца цикла остается несколько позиций он начинает повторяться
Добавлено через 3 минуты Когда убираю LOCK все потоки стремятся захватить данные))
0
|
|
|
|
||||||
| 22.02.2012, 16:39 | ||||||
0
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 22.02.2012, 16:45 | |
|
Casper-SC, само обращение к sr из разных потоков не страшно, т.к. там разные объекты.
Проблема там в самой архитектуре: создается n потоков и каждый поток обрабатывает все адреса. То есть абсолютно каждый адрес будет обработан n количество раз. Предполагаю, что таким образом ТС попытался реализовать паттерн Producer/Consumer, где n потоков обрабатывают x страниц, причем каждую страницу один раз. Отсюда и (изначально) правильный вопрос про синхронизированный доступ к списку, но потом, видно, что-то пошло не так.
2
|
|
|
|
||||||
| 22.02.2012, 17:01 | ||||||
|
О ничего себе, я всё время себе всё не так представлял, просто была какая-то ошибка с запросами тоже помню, вот я так себе после неё всё поведение и начал представлять. Вот затестил, и вправду у каждого потока свои данные. Тестил через точки останова, поэтому особого смысла нету в методе GetEasylabViews.
Код
0
|
||||||
|
12 / 12 / 1
Регистрация: 18.06.2011
Сообщений: 435
|
|
| 22.02.2012, 21:55 [ТС] | |
|
В общем как быть в моем случае?
0
|
|
|
|
||
| 22.02.2012, 21:59 | ||
|
0
|
||
|
12 / 12 / 1
Регистрация: 18.06.2011
Сообщений: 435
|
|
| 22.02.2012, 22:28 [ТС] | |
|
Casper-SC, я использую ваш код. Но там количество потоков равняется количество данных в коллекции. То есть, если _websites штук 200 то и потоков будет 200..
0
|
|
|
|
||||||||||||||||
| 22.02.2012, 22:35 | ||||||||||||||||
|
Вот когда-то давно писал, может тут чуток переделаешь. Правда тут очереди, а не стек.
Вот это помоему писал kolorotur когда-то давно, в той же теме, в которой я выкладывал код приведённый выше (если ошибаюсь, то сори, просто как бы я из лучших побуждений).
2
|
||||||||||||||||
|
12 / 12 / 1
Регистрация: 18.06.2011
Сообщений: 435
|
||||||
| 22.02.2012, 23:43 [ТС] | ||||||
|
Столько методов решения одной "проблемы", что голова кружится.. ППЦ
Добавлено через 28 минут
0
|
||||||
|
|
||
| 22.02.2012, 23:46 | ||
|
А по делу, сам же писал: Потоки: синхронизированный доступ к стеку (Invoke)
0
|
||
| 22.02.2012, 23:46 | |
|
Помогаю со студенческими работами здесь
20
Как в C# сделать синхронизированный метод?
Синхронизированный доступ к списку
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|