Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
15 / 15 / 5
Регистрация: 06.04.2012
Сообщений: 287

Синхронизировать три нити одного процесса с помощью глобальных переменных

14.10.2012, 21:52. Показов 1591. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно сделать это задание ?
Синхронизировать три нити одного процесса с помощью глобальных переменных. Первая нить выводит на экран монитора текущий месяц, вторая нить – день, а третья нить – час работы программы. Вывод должен выполняться в указанном порядке. Процесс синхронизирует работу всех нитей.
Покажите примеры...

Добавлено через 28 минут
Объясните суть задания пожалуйста и если можно, то кодик
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.10.2012, 21:52
Ответы с готовыми решениями:

Синхронизировать три нити одного процесса с помощью оператора lock
Синхронизировать три нити одного процесса с помощью оператора lock. Каждая нить формирует 5 чисел для одноименной строки...

Синхронизировать три нити одного процесса с помощью оператор lock
Синхронизировать три нити одного процесса с помощью оператор lock. Каждая нить поочередно формирует и печатает три числа a, b и c. Числа...

Синхронизировать три нити трех процессов с помощью мьютекса
Синхронизировать три нити трех процессов с помощью мьютекса. Первая нить первого процесса выводит на экран монитора текущее время в часах,...

3
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
15.10.2012, 01:06
Есть три потока, каждый делает свою часть.
Так как потоки работают параллельно, то нет гарантии, что сначала выполнится первый, потом второй, потом третей.
Суть задания - предоставить эту гарантию.

Начало работы - гарантии правильного выполнения нет:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        static void Main(string[] args)
        {
            Thread t1 = new Thread(() => Console.WriteLine("Month = " + DateTime.Now.Month));
            Thread t2 = new Thread(() => Console.WriteLine("Day = " + DateTime.Now.Day));
            Thread t3 = new Thread(() => Console.WriteLine("Hour = " + DateTime.Now.Hour));
            t1.Start();
            t2.Start();
            t3.Start();
 
            t1.Join();
            t2.Join();
            t3.Join();
            Console.ReadKey();
        }
1
15 / 15 / 5
Регистрация: 06.04.2012
Сообщений: 287
15.10.2012, 12:34  [ТС]
turbanoff, как в математике => - следовательно )))). Спасибо получила максимально )))

Добавлено через 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
110
111
#region directives
using System;
using System.Threading;
#endregion
/*
 * Синхронизировать три нити одного процесса с помощью глобальных переменных. 
 * Первая нить выводит на экран монитора текущий месяц, вторая нить – день, а 
 * третья нить – час работы программы. Вывод должен выполняться в указанном порядке. 
 * Процесс синхронизирует работу всех нитей.
 */
#region stream_script
namespace Thread_t
{
    public class CurrentMonth
    {
        #region global variables
        private object thisLock = new object();
        public int flag = 0;
        private int year = 0, month = 0;
        string time = null;
        #endregion
 
        #region functions
        public void Initialization()
        {
            new Thread(MonthGlobal).Start();
            new Thread(DayGlobal).Start();
            new Thread(TimeGlobal).Start();
        }
 
        public void MonthGlobal()
        {
            lock (thisLock)
            {
                if (flag == 0)
                {
                    
                    Console.WriteLine("Na4alo 1-oi niti...");
                    for (int i = 0; i < DateTime.Now.Month; i++)
                        Year = i + 1;
                    Console.WriteLine("Tekyshii mesyac: {0}", Year);
                    Console.WriteLine("Konec 1-oi niti..."); Console.WriteLine();
                    Thread.Sleep(500);
                    flag++;
                }
                else return;
            }
        }
        public void DayGlobal()
        {
            lock (thisLock)
            {
                if (flag == 1)
                {
                    Console.WriteLine("Na4alo 2-oi niti...");
                    for (int i = 0; i < DateTime.Now.Day; i++)
                        Month = i + 1;
                    Console.WriteLine("Tekyshii den': {0}", Month);
                    Console.WriteLine("Konec 2-oi niti..."); Console.WriteLine();
                }
                else return;
                Thread.Sleep(500);
                flag++;
            }
        }
 
        public void TimeGlobal()
        {
            lock (thisLock)
            {
                if (flag == 2)
                {
                    Console.WriteLine("Na4alo 3-ei niti...");
                    Console.WriteLine("Tekyshee vremya: " +  DateTime.Now.ToShortTimeString());
                    Console.WriteLine("Konec 3-ei niti...");
                }
                else return;
                Thread.Sleep(500);
            }
        }
        #endregion
 
        #region properties
        int Year
        {
            get { return year; }
            set
            {
                if (year < 0)
                    year = 0;
                else if (year > 9999)
                    year = 0;
                else year = value;
            }
        }
        int Month
        {
            get { return month; }
            set
            {
                if (month < 0)
                    month = 0;
                else if (month > 31)
                    month = 0;
                else month = value;
            }
        }
        #endregion
    }
}
#endregion
Добавлено через 1 минуту
Там не обращайте внимани на названия переменных ))) главное суть синхронизации )

Добавлено через 16 секунд
как поняла - синхронизация - последовательное выполнение потока )
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.10.2012, 14:01
Синхронизация процессов — приведение двух или нескольких процессов к такому их протеканию, когда определённые стадии разных процессов совершаются в определённом порядке, либо одновременно.

Синхронизация необходима в любых случаях, когда параллельно протекающим процессам необходимо взаимодействовать.
А вообще надо понимать, зачем эту нужно. Что такое взаимоблокировки, критические секции и зачем они нужны, и так далее
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.10.2012, 14:01
Помогаю со студенческими работами здесь

Найти вероятность того, что при вытягивании трех нитей окажется: 1) все нити одного цвета; б) все нити разных
2. В мешке смешаны нити трех цветов: белых 50%, красных – 30%, черных – 20%. Определить вероятность того, что при последовательном...

Рассмотреть программу, написать имена глобальных переменных, локальных переменных, формальных параметров
Program P1; var s:string; procedure P(var s:string) ; var i, j : integer; aux: char; ...

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

Как синхронизировать два процесса?
и ещё один вопрос, может кто кинет ссылочку , де подробно описано как синхронизировать два процесса? можно через критическую секцию , ну...

О глобальных переменных
Народ всем привет! Я только начал программировать на Visual Basic 2005 express edition. Помогите с одной проблемой... я никак не могу...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru