Передо мной появилась такая задача: Создается n потоков, в каждый поток передается значение string, и в каждом потоке оно сравнивается в условии if. Задача такова, если условие в одном из потоков верно - отключить остальные потоки и продолжить выполнять код в этом потоке. Если во всех потоках условие неверно - выполнить немного другой код. Не получается это реализовать. Надеюсь на вашу помощь. Потоки вызываю таким образом:
var files = File.ReadAllLines(path + @"\Файл.txt", Encoding.Default); //Получаем текст из файла
for (int i = 0; i != files.Length; i++) //Кол-во потоков = кол-ву строк в файле
{
foreach (string line in files.ToList())
{
Thread mythread = new Thread(delegate () { thread(i, line); });
mythread.Start();
}
}
Работаю с методом:
static void thread(object obj,string line)
{
}
Вам понадобится, например, такая структура:
const int numberOfThreads = 3;
// для синхронизации выполнения потоков
Barrier barrier = new Barrier(numberOfThreads);
// для результатов
bool[] results = new bool[numberOfThreads];
// для синхронизации данных
object mutex = new object();
void Thread(int idx, string v)
{
bool isGood = v.Contains(idx.ToString()); // как-то вычислили условие
lock (mutex)
results[idx] = isGood; // записали результат
b.SignalAndWait(); // дождаться всех остальных потоков
// в этой точке все результаты записаны
bool allBad;
lock (mutex) // читаем, все ли результаты плохие
allBad = results.All(v => v == false);
if (!allBad && !isGood) // если есть хорошие, но это не этот поток, отключаемся
return;
if (allBad)
{
// если ни у кого условие не выполнено, запускаем этот код
}
else
{
// иначе условие выполнено не у всех, но у нас выполнено.
// запускаем этот код
}
}
И запуск:
string v = "";
for (int i = 0; i < numberOfThreads; i++)
{
var t = new Thread(() => T(i, v));
t.Start();
}
Вам, вероятно, понадобится сохранить потоки для того, чтобы дождаться окончания их работы.
Кстати, подумайте о том, чтобы перейти от устаревших потоков к современным Task'ам.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники