Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
2 / 2 / 0
Регистрация: 17.12.2015
Сообщений: 25
1

Параллельный доступ потоков к переменной string

20.05.2018, 11:24. Показов 2212. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть кусок кода который должен выполняться параллельно.
Это парсер который получает контактные данные пользователя и должен записывать их.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        void check_all_par2(object stats)
        {
            Parallel.ForEach(accounts_list, (current_account) =>
            {
 
/////кусок кода
 
                lock (locker)
                {
 
                    string check_info = http.Get("https://site.ru/" + user_id).ToString();
 
                    string media_count_str = Regex.Match(check_info, @"\u0022media_count\u0022: ([0-9]+),").Groups[1].Value;
                    string public_email_str = Regex.Match(check_info, @"\u0022public_email\u0022: \u0022([^\u0022]+)\u0022,").Groups[1].Value;
                    string public_phone_country_code_str = Regex.Match(check_info, @"\u0022public_phone_country_code\u0022: \u0022([0-9]+)\u0022,").Groups[1].Value;
                    string contact_phone_number_str = Regex.Match(check_info, @"\u0022public_phone_number\u0022: \u0022([0-9]+)\u0022,").Groups[1].Value;
                    string city_name_str = Regex.Match(check_info, @"\u0022city_name\u0022: \u0022([^\u0022]+)\u0022").Groups[1].Value;
                }
 
/////кусок кода
 
            });
        }
Вопрос.
Как мне сделать переменные string для каждого потока чтоб был свой уникальный string и не пришлось использовать lock?
Так как при данным раскладе вообще отпадает смысл в Parallel.ForEach поток просто ждет пока с этими переменными поработает другой поток.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2018, 11:24
Ответы с готовыми решениями:

Нужно ли синхронизировать доступ к переменной из двух потоков?
Допустим есть два потока: основной и вторичный. 1. И допустим есть глобальная переменная bool b;...

Реализовать многопоточный доступ к N-ой переменной из N-го кол-во потоков
Добрый день дорогие пользователи. В общем проблема состоит в том,что мне нужно реализовать...

Является ли обращение к переменной string для чтения из разных потоков потокобезопасным?
Подскажите, обращение к переменной string для чтения из разных потоков является потокобезопасным?...

Последовательно-параллельный запуск потоков
Здравствуйте! Есть граф запуска потоков. В нем надо выделить три группы потоков: не...

4
Эксперт .NET
17686 / 12872 / 3365
Регистрация: 17.09.2011
Сообщений: 21,138
20.05.2018, 11:29 2
Цитата Сообщение от m1ndfreak20 Посмотреть сообщение
Вопрос.
Вопрос непонятен: у вас и так в каждом потоке свой уникальный string и lock там не нужен.
0
2 / 2 / 0
Регистрация: 17.12.2015
Сообщений: 25
20.05.2018, 11:33  [ТС] 3
System.NotSupportedException: "Вызов метода Read невозможен, если другая операция read находится в режиме ожидания."

вот что пишет если убрать lock
исходя из этого string не уникальный
0
Эксперт .NET
17686 / 12872 / 3365
Регистрация: 17.09.2011
Сообщений: 21,138
20.05.2018, 12:01 4
m1ndfreak20, оставьте в блоке lock только вызов Get, все остальное можно убрать.
Если хотите распараллелить и вызовы, то не используйте один и тот же клиент для чтения сайта, а в каждом потоке создавайте новый клиент. Тогда lock не потребуется.
0
1145 / 873 / 507
Регистрация: 09.04.2014
Сообщений: 2,056
20.05.2018, 12:53 5
это локальные переменные и каждый из потоков будет иметь свой набор
0
20.05.2018, 12:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2018, 12:53
Помогаю со студенческими работами здесь

Параллельный вывод из двух потоков
Помогите,пожалуйста,создать программу,которая бы запускала в себе 2 потока: один выводит + , другой...

Область видимости общей переменной для потоков + закрытие потоков
Есть два вопроса про потоки. Первый. Как можно сделать общую переменную для основного потока и...

параллельный доступ к SD
Может бредовая идея, но все же: есть 3д принтер, он отлично печатает с карточки SD, соответственно...

Доступ к паре в map<string, vector<pair<string, string>>>Temp
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru