С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
49 / 49 / 5
Регистрация: 11.07.2011
Сообщений: 282

Как при помощи обычной очереди и конструкции lock реализовать безопасную очередь

29.09.2012, 19:52. Показов 2024. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как правильно при помощи обычной очереди и конструкции lock, реализовать безопасную очередь. Т.е. необходимо чтобы можно было помещать в очередь значения из разных потоков, и забирать так же из разных потоков. Буду признателен любым предложениям!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.09.2012, 19:52
Ответы с готовыми решениями:

Реализовать Очередь при помощи массива
Помогите реализовать Очередь при помощи массива. +добавление элементов очереди +удаление элементов очереди

Как реализовать безопасную многопоточность
Есть у меня класс, который содержит поток. Этот класс имеет переменные: состояние и команда. Обе - перечисления. Нужно безопасно...

Как реализовать безопасную авторизацию?
Нужно реализовать безопасную авторизацию. Есть 2 варианта: 1)Хранить логин и хэш пароля в сессии и при заходе на каждую страницу...

9
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
29.09.2012, 20:03
предложение - почитать msdn. цитата оттудова:
C#
1
2
3
4
5
6
Queue myCollection = new Queue();
lock(myCollection.SyncRoot)
    foreach (object item in myCollection)
        // Insert your code here.
    }
}
0
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
30.09.2012, 11:57
novi4ok, отличная идея залочить всю очередь, пускай одним потоком обрабатывается
C#
1
2
3
4
5
6
7
8
9
10
11
Queue queue = new Queue();
private object _lock = new object();
private void Enqueue(object o)
{
     lock(_lock) queue.Enqueue(o);
}
 
private object Dequeue()
{
     lock(_lock) queue.Dequeue();
}
Как-то так, точно так же и с гинерик очередью
0
 Аватар для LeniumSoft
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
30.09.2012, 14:24
http://msdn.microsoft.com/ru-r... 97305.aspx
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
01.10.2012, 19:47
Цитата Сообщение от Yukikaze Посмотреть сообщение
novi4ok, отличная идея залочить всю очередь, пускай одним потоком обрабатывается
тебе показывают как залочить, а остальное - свое весчество используй.
0
49 / 49 / 5
Регистрация: 11.07.2011
Сообщений: 282
01.10.2012, 20:35  [ТС]
Спасибо) прошерстил весь инет(ну, до куда смог дотянуться), прочел все что было под рукой по многопоточности и решил задачу. Вышло примерно то же самое, что подсказали выше, только с Wait/Pulse, и стратегией выхода.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
01.10.2012, 21:35
Цитата Сообщение от Dimblch Посмотреть сообщение
только с Wait/Pulse, и стратегией выхода.
А зачем Pulse, если очередь неблокируемая?
Достаточно обыного lock, как в примере выше.
0
49 / 49 / 5
Регистрация: 11.07.2011
Сообщений: 282
01.10.2012, 21:46  [ТС]
Нет, очередь как раз блокируемая.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
01.10.2012, 21:48
Тогда вам в помощь четвертый фреймворк и класс BlockingCollection - там все прекрасно реализовано.
0
49 / 49 / 5
Регистрация: 11.07.2011
Сообщений: 282
01.10.2012, 21:55  [ТС]
СПасибо, кстати не знал что она в 4-м фреймворке реализована.
Но мне надо было именно реализовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.10.2012, 21:55
Помогаю со студенческими работами здесь

Как данную программу реализовать при помощи классов
как данную программу реализовать при помощи классов ~cpp ...

Постройте очередь из 7-ти символов - ‘k’, ‘l’,‘m’, ‘n’, ‘o’, ‘p’, ‘r’. Выведите из очереди три символа ‘l’, ‘m’, ‘r’ и добавьте в конец очереди символ
Постройте очередь из 7-ти символов - ‘k’, ‘l’,‘m’, ‘n’, ‘o’, ‘p’, ‘r’. Выведите из очереди три символа ‘l’, ‘m’, ‘r’ и добавьте в конец...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru