﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">В lock путаются очередь</title>
  <id>~/topic/3669/v-lock-putayutsya-ochered/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-07-05T04:54:55Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=3669" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/26461/</id>
    <title type="text">Попробуй AutoResetEvent... Пример использования есть в примере S# QUIK Console, что то такое... Там ...</title>
    <published>2013-06-25T11:30:02Z</published>
    <updated>2013-06-25T11:30:02Z</updated>
    <author>
      <name>yar1k0v</name>
      <uri>https://stocksharp.com/users/6437/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Попробуй AutoResetEvent... Пример использования есть в примере S# QUIK Console, что то такое... Там как раз то что нужно)&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/26459/</id>
    <title type="text">Про Random мне тоже интересно почему так. Я использую модем для оповещения смсками и пытаюсь еще сде...</title>
    <published>2013-06-25T06:30:23Z</published>
    <updated>2013-06-25T06:30:23Z</updated>
    <author>
      <name>MenDel</name>
      <uri>https://stocksharp.com/users/6356/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Про Random мне тоже интересно почему так.&lt;/p&gt;
&lt;p&gt;Я использую модем для оповещения смсками и пытаюсь еще сделать так, чтоб когда инет отключается, мобильный инет автоматически подключался.
Получается такая ситуация.
Смс для модема поступают из разных мест и потоков, мне надо чтоб они ставились в очередь на отправку.
Потому что на выполнение модемом команд нужно время.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/26458/</id>
    <title type="text">Прости, у меня такой проблемы не возникало. И сам пример, даже после нажатия 15 раз нормально работа...</title>
    <published>2013-06-24T19:07:45Z</published>
    <updated>2013-06-24T19:09:58Z</updated>
    <author>
      <name>yar1k0v</name>
      <uri>https://stocksharp.com/users/6437/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Прости, у меня такой проблемы не возникало.
И сам пример, даже после нажатия 15 раз нормально работает.
Может скажешь какова суть эксперимента? Возможно я смогу помочь по более конкретной задаче?
Зависать может из за нехватки ресурсов, хз...
Я не знаю как устроен метод Sleep(), я лишь знаю что он делает. Но видимо в нем причина зависания.
Возможно пока он слипит текущий поток, запускается следующий. Ну и из за этого неполадки.&lt;/p&gt;
&lt;p&gt;П.С.&lt;/p&gt;
&lt;p&gt;Для меня например до сих пор загадка принцип работы new Random().Next(int min, int max) =) а именно почему при одновременном вызове нескольких таких методов, возвращаемые значения идентичны?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/26457/</id>
    <title type="text">Суть кода в том что в основном потоке i итерируется, а в другом обрабатывается. В основном потоке ло...</title>
    <published>2013-06-24T17:01:26Z</published>
    <updated>2013-06-24T17:02:02Z</updated>
    <author>
      <name>MenDel</name>
      <uri>https://stocksharp.com/users/6356/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Суть кода в том что в основном потоке i итерируется, а в другом обрабатывается. В основном потоке лок на i нельзя накладывать.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Вот пример:&lt;/p&gt;
&lt;div class="spoiler"&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
        int i = 0;
        static object locker = new object();

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Start_Click(object sender, RoutedEventArgs e)
        {
            lock (locker) { i++; }
            new System.Threading.Thread(() =&amp;gt;
            {
                lock (locker)
                {
                    this.Dispatcher.BeginInvoke((Action)delegate()
                    {
                        Text.Text = &amp;quot;Started &amp;quot; + i.ToString();
                    });
                    System.Threading.Thread.Sleep(2000);
                    this.Dispatcher.BeginInvoke((Action)delegate() 
                    {
                        Text.Text += Environment.NewLine;
                        Text.Text += &amp;quot;Finished &amp;quot; + i.ToString();
                    });
                }  
            }).Start();
        }

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;В данном примере ничего не путается.&lt;/p&gt;
&lt;p&gt;Почему lock на переменную итерации нельзя накладывать?
Расскажите пожалуйста, буду знать. Спасибо!&lt;/p&gt;
&lt;p&gt;Если усыпить поток не на 2, а на 5 секунд
вот, что получилось (я нажал на кнопку 15 раз)
Результаты вывел не на форму, а в дебаг&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-xml"&gt;Started 1
Поток '&amp;lt;Без имени&amp;gt;' (0x2bb4) завершился с кодом 0 (0x0).
Finished 2
Started 2
Поток '&amp;lt;Без имени&amp;gt;' (0x2a1c) завершился с кодом 0 (0x0).
Finished 3
Started 3
Поток '&amp;lt;Без имени&amp;gt;' (0x1830) завершился с кодом 0 (0x0).
Поток '&amp;lt;Без имени&amp;gt;' (0x1fe4) завершился с кодом 0 (0x0).
Finished 4
Started 4
Поток '&amp;lt;Без имени&amp;gt;' (0x14ac) завершился с кодом 0 (0x0).
Finished 5
Started 5
Поток '&amp;lt;Без имени&amp;gt;' (0x2934) завершился с кодом 0 (0x0).
Finished 5
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;В результате сработало только 5 раз из 15&lt;/li&gt;
&lt;li&gt;Форма повисла&lt;/li&gt;
&lt;li&gt;Не понял по какой причине в Finished число идет на 1 больше&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Есть еще мысли?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/26453/</id>
    <title type="text">Суть кода в том что в основном потоке i итерируется, а в другом обрабатывается. В основном потоке ло...</title>
    <published>2013-06-24T14:52:09Z</published>
    <updated>2013-06-24T14:56:29Z</updated>
    <author>
      <name>yar1k0v</name>
      <uri>https://stocksharp.com/users/6437/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Суть кода в том что в основном потоке i итерируется, а в другом обрабатывается. В основном потоке лок на i нельзя накладывать.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Вот пример:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
        int i = 0;
        static object locker = new object();

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Start_Click(object sender, RoutedEventArgs e)
        {
            lock (locker) { i++; }
            new System.Threading.Thread(() =&amp;gt;
            {
                lock (locker)
                {
                    this.Dispatcher.BeginInvoke((Action)delegate()
                    {
                        Text.Text = &amp;quot;Started &amp;quot; + i.ToString();
                    });
                    System.Threading.Thread.Sleep(2000);
                    this.Dispatcher.BeginInvoke((Action)delegate() 
                    {
                        Text.Text += Environment.NewLine;
                        Text.Text += &amp;quot;Finished &amp;quot; + i.ToString();
                    });
                }  
            }).Start();
        }

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;В данном примере ничего не путается.&lt;/p&gt;
&lt;p&gt;Почему lock на переменную итерации нельзя накладывать?
Расскажите пожалуйста, буду знать. Спасибо!&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/26443/</id>
    <title type="text">... суть кода не понятна... вообще на переменную итерации в данном случае нужно накладывать лок, есл...</title>
    <published>2013-06-23T19:12:09Z</published>
    <updated>2013-06-23T19:12:09Z</updated>
    <author>
      <name>MenDel</name>
      <uri>https://stocksharp.com/users/6356/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;...&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;суть кода не понятна... вообще на переменную итерации в данном случае нужно накладывать лок, если вы тестили поочередность исполнения.&lt;/p&gt;
&lt;p&gt;Суть кода в том что в основном потоке i итерируется, а в другом обрабатывается. В основном потоке лок на i нельзя накладывать.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/26442/</id>
    <title type="text">Может кому пригодится, Я использую такую конструкцию вместо лока, чтоб не путалась очередь команд по...</title>
    <published>2013-06-23T19:08:13Z</published>
    <updated>2013-06-23T19:08:13Z</updated>
    <author>
      <name>MenDel</name>
      <uri>https://stocksharp.com/users/6356/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Может кому пригодится,
Я использую такую конструкцию вместо лока, чтоб не путалась очередь команд посылающихся модему.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;BlockingCollection&amp;lt;string[]&amp;gt; _queue = new BlockingCollection&amp;lt;string[]&amp;gt;(new ConcurrentQueue&amp;lt;string[]&amp;gt;());
Thread bt = new Thread(() =&amp;gt;
                {
                    while (true)
                    {
                        // Thread.Sleep(1000); Можно добавить
                        if (_queue.Count == 0) continue;
                        var val = _queue.Take();
                        SmsSend(val); // Метод которому посылается val
                    }
                }) { Name = &amp;quot;bt&amp;quot;, IsBackground = true };
backThread.Start(); 
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/26428/</id>
    <title type="text">private Thread t; private int i = 0; private readonly SyncObject _syncLock = new SyncObject(); priva...</title>
    <published>2013-06-22T21:49:40Z</published>
    <updated>2013-06-22T21:49:40Z</updated>
    <author>
      <name>yar1k0v</name>
      <uri>https://stocksharp.com/users/6437/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;private Thread t;
private int i = 0;
private readonly SyncObject _syncLock = new SyncObject();
private void button1_Click(object sender, RoutedEventArgs e)
{
i++;
t = new Thread(SSS);
t.Start(i);
}&lt;/p&gt;
&lt;p&gt;private void SSS(object ii)
{
lock (_syncLock)
{
Debug.WriteLine(&amp;quot;Отправка &amp;quot; + ii);
Thread.Sleep(3000);
Debug.WriteLine(&amp;quot;Получение &amp;quot; + ii);
}
}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;суть кода не понятна... вообще на переменную итерации в данном случае нужно накладывать лок, если вы тестили поочередность исполнения.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/26427/</id>
    <title type="text">Task - задача для выполнения в фоновом потоке new System.Threading.Tasks.Task(() =&amp;gt; { }).Start(); ил...</title>
    <published>2013-06-22T21:43:16Z</published>
    <updated>2013-06-22T21:46:40Z</updated>
    <author>
      <name>yar1k0v</name>
      <uri>https://stocksharp.com/users/6437/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Task - задача для выполнения в фоновом потоке&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
new System.Threading.Tasks.Task(() =&amp;gt; { }).Start();
или
new System.Threading.Tasks.TaskFactory().StartNew(() =&amp;gt; { }).Start();

&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/26425/</id>
    <title type="text">А можно по подробнее про Task.Run...если не сложно...что это и с чем едят?первый раз увидел просто.....</title>
    <published>2013-06-22T14:55:44Z</published>
    <updated>2013-06-22T14:55:44Z</updated>
    <author>
      <name>casper-ss</name>
      <uri>https://stocksharp.com/users/26936/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;А можно по подробнее про Task.Run...если не сложно...что это и с чем едят?первый раз увидел просто...&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/25815/</id>
    <title type="text">Создание потока без пула - штука тяжёлая. Скорее всего это не lock путается, а то что приходит в нег...</title>
    <published>2013-05-05T09:51:40Z</published>
    <updated>2013-05-05T09:57:11Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.com/users/6491/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Создание потока без пула - штука тяжёлая.
Скорее всего это не lock путается, а то что приходит в него.
PS
Попробуйте Task.Run(...)&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/25810/</id>
    <title type="text">Только сейчас заметил, что в lock путается очередь. Вот простой код для проверки private Thread t; p...</title>
    <published>2013-05-04T18:50:36Z</published>
    <updated>2013-05-04T18:56:10Z</updated>
    <author>
      <name>MenDel</name>
      <uri>https://stocksharp.com/users/6356/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Только сейчас заметил, что в lock путается очередь.
Вот простой код для проверки&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
        private Thread t;
        private int i = 0;
        private readonly SyncObject _syncLock = new SyncObject();
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            i++;
            t = new Thread(SSS);
            t.Start(i);
        }

        private void SSS(object ii)
        {
            lock (_syncLock)
            {
                Debug.WriteLine(&amp;quot;Отправка &amp;quot; + ii);
                Thread.Sleep(3000);
                Debug.WriteLine(&amp;quot;Получение &amp;quot; + ii);
            }
        }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Результат&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-xml"&gt;Отправка 1
Получение 1
Поток '&amp;lt;Без имени&amp;gt;' (0x1c98) завершился с кодом 0 (0x0).
Отправка 10
Получение 10
Поток '&amp;lt;Без имени&amp;gt;' (0x1b28) завершился с кодом 0 (0x0).
Отправка 9
Получение 9
Поток '&amp;lt;Без имени&amp;gt;' (0x2350) завершился с кодом 0 (0x0).
Отправка 7
Получение 7
Поток '&amp;lt;Без имени&amp;gt;' (0x1d68) завершился с кодом 0 (0x0).
Отправка 8
Получение 8
Поток '&amp;lt;Без имени&amp;gt;' (0x2338) завершился с кодом 0 (0x0).
Отправка 6
Получение 6
Поток '&amp;lt;Без имени&amp;gt;' (0x20c4) завершился с кодом 0 (0x0).
Отправка 5
Получение 5
Поток '&amp;lt;Без имени&amp;gt;' (0x240) завершился с кодом 0 (0x0).
Отправка 4
Получение 4
Поток '&amp;lt;Без имени&amp;gt;' (0x1e8c) завершился с кодом 0 (0x0).
Отправка 2
Получение 2
Поток '&amp;lt;Без имени&amp;gt;' (0x470) завершился с кодом 0 (0x0).
Отправка 3
Получение 3
Поток '&amp;lt;Без имени&amp;gt;' (0x1f20) завершился с кодом 0 (0x0).
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Мне кажется такого же не должно быть.
Или я где то не прав?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>