Как получить одно значение во все потоки?

dmitlife

Client
Регистрация
25.04.2019
Сообщения
43
Благодарностей
26
Баллы
18
Приветствую! Помогите пожалуйста найти решение.
Необходимо в многопотоке получить первую строку из списка с удалением и передать её всем действующим потокам.
После определённого действия в шаблоне, нужно снова взять новую строку и передать её всем потокам и делать так пока список не закончится.
То есть с одной строкой должны работать сразу все потоки которые активны.

Подумал, что логика такая - Лочим один поток, он берёт строку из списка с удалением и кладёт в глобальную переменную, а другие потоки считывают глобальную переменную и кладут значение в локальную. Но не получается что-то.

Нашёл код на форуме, но в C# не силён. Всё равно потоки берут разные значения.
Пытаюсь использовать код:
C#:
lock(project.GlobalVariables){
    var list = project.Lists["Список"];
    string rx = list[0];
    project.GlobalVariables.SetVariable("domen", "value", rx);
    project.Lists["Список"].RemoveAt(0);
}

// Текст для обработки
string text = project.ExecuteMacro(project.GlobalVariables["domen", "value"].Value);
// Обработка текста "В переменную"
project.Variables["res"].Value = text;
Как правильно решить мою задачу?
Спасибо за помощь!
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 694
Баллы
113
в локе сначала надо глобалку проверить есть ли там что. если есть, то не трогать список, выходить и работать с данными из глобалки.
если в глобалке пусто, то брать данные из списка. и ставить в глобалку.
определенное действие в шаблоне, должно обнулять глобалку. опять же в локе и с проверкой наличия данных.

незнаю как ты собираешься синхронизировать получение новых данных и те потоки которые еще не дошли до определенного места для сброса. без синхронизации, у тебя будет полный кабздец с данными.
 
  • Спасибо
Реакции: dmitlife

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 381
Благодарностей
3 304
Баллы
113

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)