Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
 Аватар для TuM0xA
212 / 210 / 137
Регистрация: 21.12.2015
Сообщений: 545

Thread.Sleep и lock

02.01.2017, 23:11. Показов 2551. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что будет если вызвать Thread.Sleep() внутри блока кода lock?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.01.2017, 23:11
Ответы с готовыми решениями:

Как использовать Thread.Sleep(5000), ошибка: "Элемент "Thread" не существует в текущем контексте"
я так понимаю, что Thread.Sleep(5000); это "тормоз" процесса выполенения программы на 5 сек? А как его правильно инициализировать и...

Thread.Sleep
Итак, есть примерно вот такой консольный код: static void Main(string args) { int i = 0; Menu(i); ...

Thread.Sleep не работает
Всем привет! Задача такая есть таймер который запускается каждый 30 сек и делает рассылку и уведомление Но когда наступает время (1 мин...

5
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
02.01.2017, 23:20
Цитата Сообщение от TuM0xA Посмотреть сообщение
Что будет если вызвать Thread.Sleep() внутри блока кода lock?
Получите по морде от code reviewer'a.

А тем временем все остальные потоки, синхронизирующиеся на том же объекте, будут дожидаться, пока залоченный поток отоспится.
1
 Аватар для TuM0xA
212 / 210 / 137
Регистрация: 21.12.2015
Сообщений: 545
02.01.2017, 23:38  [ТС]
kolorotur, то есть thread.sleep внутри lock будет только тормозить программу?
вот код, если тут убрать Thread.Sleep(2); из метода Sum, то результат выполнения изменится, а по идее это случаться не должно
Кликните здесь для просмотра всего текста

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
using System;
using System.Threading;
class Locker { }
static class SyncLock 
{
    static int[] nums = {1,2,3,4,5,6,7,8,9};
    static Locker lockThis = new Locker();
    public static void Sum() 
    {
 
        for (int i = 0, j = 0; i < 9; i++)
        {
            lock (lockThis)
            {
                Console.Write("{0} ", j += nums[i]);
                nums[i] = 1;
                Thread.Sleep(2);
            }
        }
            
        }
    }
class demo
{
    static void Main()
    {
        Thread thrd1 = new Thread(SyncLock.Sum);
        Thread thrd2 = new Thread(SyncLock.Sum);
        thrd1.Start();  
        thrd2.Start();
        thrd1.Join();
        thrd2.Join();
    }
}
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
02.01.2017, 23:49
Лучший ответ Сообщение было отмечено TuM0xA как решение

Решение

Цитата Сообщение от TuM0xA Посмотреть сообщение
то есть thread.sleep внутри lock будет только тормозить программу?
Ага.

Цитата Сообщение от TuM0xA Посмотреть сообщение
если тут убрать Thread.Sleep(2); из метода Sum, то результат выполнения изменится, а по идее это случаться не должно
Почему не должно?
Наличие lock само по себе не гарантирует какую-то определенную очередность выполнения, он всего лишь не позволяет двум потокам одновременно находиться в критической зоне.
1
 Аватар для TuM0xA
212 / 210 / 137
Регистрация: 21.12.2015
Сообщений: 545
03.01.2017, 00:08  [ТС]
kolorotur, можете, пожалуйста, глянуть на код(в предыдущем сообщении) и сказать почему наличие наличие thread.sleep внутри lock влияет на результат выполнения
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
03.01.2017, 00:24
Лучший ответ Сообщение было отмечено TuM0xA как решение

Решение

Цитата Сообщение от TuM0xA Посмотреть сообщение
почему наличие наличие thread.sleep внутри lock влияет на результат выполнения
Потому что наличие инструкции, блокирующей поток, может повлиять на то, какой поток из очереди ОС решит запустить в критическую зону следующим.
И, как видим, таки влияет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.01.2017, 00:24
Помогаю со студенческими работами здесь

Странное поведение Thread.Sleep
Забавно, уже не первый раз встречаю такую вещь: делаю движение контрола по форме в цикле (самостоятельно, или по нажатым клавишам). Чтобы...

Thread.Sleep под капотом
Доброго времени суток! Собственно, весь вопрос в описании темы. Погуглил - мало информации и никакой конкретики. Точнее, она есть, но...

ProgressBar связать с thread.sleep
как получать progressbar.Value в случае когда стоит задержка в 10 секунд и надо в прогресс бар показывать сколько секунд от 10 уже?или...

Аналог Thread.Sleep в Task
Имеется пример который запускает пару потоков с задержкой. using System; using System.Collections.Generic; using System.Linq; using...

Более точная альтернатива Thread.Sleep(1)
Как подсказывает мне гугл, Thread.Sleep - это зло во плоти, атата, руки оторвут, и т.д. Раньше проблем не было, пока не возникла...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru