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

Синхронизация двух потоков

21.06.2013, 12:24. Показов 1519. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, в процессе обучения столкнулся с проблемой:
У меня есть класс monitorfolder, который мониторит папку, и при появлении в ней файла добавляет его в static public myQueue, отдельного класса InterClassQueue. monitorfolder работает в отдельно потоке(первый поток). И есть Класс processFile, который выгребает из очереди myQueue файл и обрабатывает его. processFile так же работает в отдельном потоке(поток 2). Таким образом У меня есть 2 потока, которые взаимодействуют через myQueue класса InterClassQueue.
Вопрос, можно ли мне как-то в InterClassQueue осуществить блокировку myQueue, чтобы в ее свойстве как-то было прописано, что если к ней обращается один класс, то другой должен ждать?

И второй наводящий вопрос. Мой processFile, реализован так: циклом while проверяется есть ли объекты в файле, и кк только очередь наполняется, запускаю обработку файлов. Как сделать "сигналку" на очереди, что только если в очередь поступили новые елементы, запустить проверку очереди?

Спасибо за помощь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.06.2013, 12:24
Ответы с готовыми решениями:

System.threading.timer и синхронизация двух потоков
Здравствуйте, в с# я совсем недавно и предо мной стоит следующая задача: сделать отображение текущего времени на форме (постоянно...

Синхронизация потоков на элементарном уровне (переключение потоков)
в общем разбираюсь с потоками, на сколько понял мне нужен lock Вот имеется просто пример public void RunAdd() ...

Синхронизация потоков: проблема гонки потоков
Есть проблема в синхронизации потоков, которую я не знаю, как решить. Точнее у меня получается типичная гонка потоков. Есть функция,...

3
 Аватар для WizarД
53 / 56 / 10
Регистрация: 07.02.2011
Сообщений: 556
Записей в блоге: 1
21.06.2013, 12:31
Используйте события.
0
 Аватар для SandWraith
189 / 189 / 38
Регистрация: 11.04.2009
Сообщений: 497
21.06.2013, 12:41
Цитата Сообщение от Hamsterok Посмотреть сообщение
обращается один класс, то другой должен ждать
lock?

Цитата Сообщение от Hamsterok Посмотреть сообщение
"сигналку"
event

В догонку: ManualResetEvent Class, AutoResetEvent Class
1
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
21.06.2013, 13:39
Цитата Сообщение от Hamsterok Посмотреть сообщение
Вопрос, можно ли мне как-то в InterClassQueue осуществить блокировку myQueue, чтобы в ее свойстве как-то было прописано, что если к ней обращается один класс, то другой должен ждать?
Для этого достаточно обернуть вашу очередь методом Queue.Synchronized.
C#
1
public Queue<int> myQueue = Queue.Synchronized(new Queue<int>());
Добавлено через 3 минуты
Цитата Сообщение от Hamsterok Посмотреть сообщение
И второй наводящий вопрос. Мой processFile, реализован так: циклом while проверяется есть ли объекты в файле, и кк только очередь наполняется, запускаю обработку файлов. Как сделать "сигналку" на очереди, что только если в очередь поступили новые елементы, запустить проверку очереди?
Используйте вместо обычной очереди BlockingCollection.
Потоку, который обрабатывает файлы, достаточно вызвать myBlockingCollection.Take() - и он будет ожидать пока кто-либо не добавит очередной элемент в очередь.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.06.2013, 13:39
Помогаю со студенческими работами здесь

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

Синхронизация потоков
Привет. Проблема: рандомные потоки возвращают одинаковые значения, хотя синхронизацию сделал. Для примера код такой: private...

Синхронизация потоков
Есть программа: using System; using System.Diagnostics; using System.Linq; using System.Runtime.ConstrainedExecution; using...

Синхронизация потоков
Не так давно начал заниматься c#.. возникла следующее недопонимание потоков. Программа ищет в цикле случайное число от 0 до 10, цикл...

Синхронизация потоков
Есть ли возможность в C# сделать часть кода потока защищенным от прерывания другими потоками. Lock не подходит, т.к. потоки не используют...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
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
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru