Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240

Поиск чисел в массиве в многопоточном режиме

05.02.2015, 22:44. Показов 3576. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал программу, она ищет среди массива рандомных чисел 1 число с помощью двух потоков и в лоб(перебором), но почему-то потоки не работают вместе, почему это так. Заранее спасибо.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
// using System.Threading.Tasks;
 
namespace TwoTreads
{
    class Program
    {
        private double[] mas;
        private double a;
        private int i, j;
        private bool stopTread;
        private ThreadStart myThreadDelegate;
        private Thread thr;
        public Program(double[] ar, double chys)
        {
            a = chys;
            mas = new double[10000000];
            mas = ar;
            stopTread = false;
        }
        public void SearchThread()
        {
            Console.WriteLine("Поток 1 запущен"); 
            for (i = 0; i < 500000; i++)
            {
                if (stopTread == true)
                    break;
                //else
                    if (mas[i] == a)
                    {
                        stopTread = true;
                        Console.WriteLine("Число {0} найдено под номером {1}", a, i);
                    }
                //    Thread.Sleep(500);
            }
        }
 
        public void SearchThread1()
        {
            Console.WriteLine("Поток 2 запущен");
            for (j = 10000000; j > 500000; j--)
            {
                if (stopTread == true)
                   break;
                //else
                    if (mas[i] == a)
                    {
                        stopTread = true;
                        Console.WriteLine("Число {0} найдено под номером {1}", a, j);
                    }
                   // Thread.Sleep(500);
            }
        }
        public void go()
        {
            ThreadStart myThreadDelegate = new ThreadStart(SearchThread);
            Thread thr = new Thread(myThreadDelegate);
            thr.Start();
        }
        public void go1()
        {
            ThreadStart myThreadDelegate = new ThreadStart(SearchThread1);
            Thread thr = new Thread(myThreadDelegate);
             thr.Start();
        }
    }
    class TwoTreadsApp
    {
        [STAThread]
        static void Main(string[] args)
        {
            double[] arr;
            double k;
            Random rand = new Random();
            arr = new double[10000000];
            for (int i = 0; i < arr.Length; i++)
            {
                arr[i] = Convert.ToDouble(rand.Next(10000)) / 100;
             //   Console.WriteLine("{0}", arr[i]);
            }
            Console.WriteLine("Введите число для поиска");
            k = double.Parse(Console.ReadLine());
            Program sw1 = new Program(arr, k);
            Program sw2 = new Program(arr, k);
            var sw = System.Diagnostics.Stopwatch.StartNew();
            var sw3 = System.Diagnostics.Stopwatch.StartNew();
            //  Array.Sort(arr);
            sw1.go();
            Thread.Sleep(250);
            sw2.go1();
            //if (Program.stopTread == true)
            sw.Stop();
            Console.WriteLine("затрачено времени:{0}", sw.Elapsed);
          /*  for (int i = 0; i < arr.Length; i++)
                if (arr[i] == k)
                {
                    break;
                    sw3.Stop();
                    Console.WriteLine("Число {0} найдено под номером {1}", k, i);
                    Console.WriteLine("затрачено времени:{0}", sw3.Elapsed);
                }*/
            Console.ReadKey();
        }
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.02.2015, 22:44
Ответы с готовыми решениями:

Зависание окна в многопоточном режиме
Карочи есть проблема. Этот код работает нормально (текст меняется, прогрессбар заполняется, с формой можно делать всё что взбредет в...

обход папок в многопоточном режиме
Помогите реализовать данный код в многопоточном режиме. Заранее спасибо. Я не особо понимаю в чем ошибки, проверьте пожалуйста. inline...

Выполнение фоновых задач в многопоточном режиме
Здравствуйте, возник вопрос с многопотоковостью в ASP.MVC приложении. Есть задачи которые необходимо выполнять в фоновом режиме в разных...

22
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10428 / 5158 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
06.02.2015, 22:41
Лучший ответ Сообщение было отмечено Mansu как решение

Решение

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Mansu Посмотреть сообщение
но почему-то они каждый находит по заданному числу.
Если смотреть ваш исходный код, то там вы создаете два объекта класса Program. Поэтому поле stopTread у каждого свое. А вам же нужно создать один объект класса Program, и запускать у него методы go() и go1(). Тогда поле stopTread у них будет общее.
1
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240
06.02.2015, 23:15  [ТС]
Большое вам спасибо, я не заметил. Чтоб мне добавить еще допустим пару потоков, мне надо создать еще столько же методов go и поисков соответственно?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10428 / 5158 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
06.02.2015, 23:51
Цитата Сообщение от Mansu Посмотреть сообщение
Чтоб мне добавить еще допустим пару потоков, мне надо создать еще столько же методов go и поисков соответственно?
Я не знаю, вы же автор Как надо с моей точки зрения, я вам привел в посте #6.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.02.2015, 23:51
Помогаю со студенческими работами здесь

Как сохранять список в многопоточном режиме
Есть список lst. В нем список урл. Через Parallel.For я делаю гет-запросы и манипулирую с данными. Как мы понимаем данные из списка берутся...

Подсчёт числа пи в многопоточном режиме с помощью mpi.h
Подскажите, пожалуйста, программу, которая считает число pi до 100 знака после запятой. Распараллелено на mpi и нет. Спасибо.

Различия в точности вычисления в одно/многопоточном (OMP) режиме
Различия в точности, скорости вычисления в одно/многопоточном (OMP) режиме Привет. Стала задача оптимизировать софт и ускорить за...

Как работать через одно соединение с БД в многопоточном режиме?
Как, я думаю, вы уже знаете для работы с PostgreSQL сначала необходимо установить соединение с базой данных, затем используя данное...

Реализация приложения, собирающего данные по протоколу UDP в многопоточном режиме
Здравствуйте, столкнулся с проблемой, которую не могу решить уже неделю. По заданию необходимо сделать интерфейс для приложения,...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru