﻿<?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-04-07T18:23:58Z</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">Попробуй AutoResetEvent... Пример использования есть в примере S# QUIK Console, что то такое... Там как раз то что нужно)</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">Про Random мне тоже интересно почему так.&lt;br /&gt;&lt;br /&gt;Я использую модем для оповещения смсками и пытаюсь еще сделать так, чтоб когда инет отключается, мобильный инет автоматически подключался.&lt;br /&gt;Получается такая ситуация.&lt;br /&gt;Смс для модема поступают из разных мест и потоков, мне надо чтоб они ставились в очередь на отправку.&lt;br /&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;br /&gt;И сам пример, даже после нажатия 15 раз нормально работает.&lt;br /&gt;Может скажешь какова суть эксперимента? Возможно я смогу помочь по более конкретной задаче?&lt;br /&gt;Зависать может из за нехватки ресурсов, хз...&lt;br /&gt;Я не знаю как устроен метод Sleep(), я лишь знаю что он делает. Но видимо в нем причина зависания.&lt;br /&gt;Возможно пока он слипит текущий поток, запускается следующий. Ну и из за этого неполадки.&lt;br /&gt;&lt;br /&gt;П.С.&lt;br /&gt;&lt;br /&gt;Для меня например до сих пор загадка принцип работы new Random().Next(int min, int max) =) а именно почему при одновременном вызове нескольких таких методов, возвращаемые значения идентичны?</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;div class="quote"&gt;&lt;span class="quotetitle"&gt;yar1k0v &lt;a href="https://stocksharp.com/posts/m/26453/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Quote:&lt;/span&gt;&lt;div class="innerquote"&gt;Суть кода в том что в основном потоке i итерируется, а в другом обрабатывается. В основном потоке лок на i нельзя накладывать.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Вот пример:&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Show spoiler' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_aa3d192668f3493cbbd5558098e34804');" title='Show spoiler' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_aa3d192668f3493cbbd5558098e34804' style='display:none'&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush: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;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;В данном примере ничего не путается.&lt;br /&gt;&lt;br /&gt;Почему lock на переменную итерации нельзя накладывать?&lt;br /&gt;Расскажите пожалуйста, буду знать. Спасибо!&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Если усыпить поток не на 2, а на 5 секунд&lt;br /&gt;вот, что получилось (я нажал на кнопку 15 раз)&lt;br /&gt;Результаты вывел не на форму, а в дебаг&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:xml"&gt;
Started 1
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x2bb4) завершился с кодом 0 (0x0).
Finished 2
Started 2
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x2a1c) завершился с кодом 0 (0x0).
Finished 3
Started 3
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x1830) завершился с кодом 0 (0x0).
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x1fe4) завершился с кодом 0 (0x0).
Finished 4
Started 4
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x14ac) завершился с кодом 0 (0x0).
Finished 5
Started 5
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x2934) завершился с кодом 0 (0x0).
Finished 5&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;1. В результате сработало только 5 раз из 15&lt;br /&gt;2. Форма повисла&lt;br /&gt;3. Не понял по какой причине в Finished число идет на 1 больше&lt;br /&gt;&lt;br /&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;div class="quote"&gt;&lt;span class="quotetitle"&gt;Quote:&lt;/span&gt;&lt;div class="innerquote"&gt;Суть кода в том что в основном потоке i итерируется, а в другом обрабатывается. В основном потоке лок на i нельзя накладывать.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Вот пример:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush: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;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;В данном примере ничего не путается.&lt;br /&gt;&lt;br /&gt;Почему lock на переменную итерации нельзя накладывать?&lt;br /&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"> private Thread t; private int i = 0; private readonly SyncObject _syncLock = new SyncObject(); priv...</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;div class="quote"&gt;&lt;span class="quotetitle"&gt;yar1k0v &lt;a href="https://stocksharp.com/posts/m/26428/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Quote:&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush: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;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;суть кода не понятна... вообще на переменную итерации в данном случае нужно накладывать лок, если вы тестили поочередность исполнения.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Суть кода в том что в основном потоке i итерируется, а в другом обрабатывается. В основном потоке лок на i нельзя накладывать.&lt;br /&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;br /&gt;Я использую такую конструкцию вместо лока, чтоб не путалась очередь команд посылающихся модему.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush: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;/pre&gt;
&lt;/div&gt;&lt;/div&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(); priv...</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;div class="quote"&gt;&lt;span class="quotetitle"&gt;Quote:&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;private Thread t;&lt;br /&gt;private int i = 0;&lt;br /&gt;private readonly SyncObject _syncLock = new SyncObject();&lt;br /&gt;private void button1_Click(object sender, RoutedEventArgs e)&lt;br /&gt;{&lt;br /&gt;    i++;&lt;br /&gt;    t = new Thread(SSS);&lt;br /&gt;    t.Start(i);&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;private void SSS(object ii)&lt;br /&gt;{&lt;br /&gt;    lock (_syncLock)&lt;br /&gt;    {&lt;br /&gt;        Debug.WriteLine(&amp;quot;Отправка &amp;quot; + ii);&lt;br /&gt;        Thread.Sleep(3000);&lt;br /&gt;        Debug.WriteLine(&amp;quot;Получение &amp;quot; + ii);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&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">Task - задача для выполнения в фоновом потоке&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

new System.Threading.Tasks.Task(() =&amp;gt; { }).Start();
или
new System.Threading.Tasks.TaskFactory().StartNew(() =&amp;gt; { }).Start();
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&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">А можно по подробнее про Task.Run...если не сложно...что это и с чем едят?первый раз увидел просто...&lt;br /&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;br /&gt;Скорее всего это не lock путается, а то что приходит в него.&lt;br /&gt;PS&lt;br /&gt;Попробуйте Task.Run(...)</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">Только сейчас заметил, что в lock путается очередь.&lt;br /&gt;Вот простой код для проверки&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush: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;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Результат&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:xml"&gt;
Отправка 1
Получение 1
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x1c98) завершился с кодом 0 (0x0).
Отправка 10
Получение 10
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x1b28) завершился с кодом 0 (0x0).
Отправка 9
Получение 9
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x2350) завершился с кодом 0 (0x0).
Отправка 7
Получение 7
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x1d68) завершился с кодом 0 (0x0).
Отправка 8
Получение 8
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x2338) завершился с кодом 0 (0x0).
Отправка 6
Получение 6
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x20c4) завершился с кодом 0 (0x0).
Отправка 5
Получение 5
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x240) завершился с кодом 0 (0x0).
Отправка 4
Получение 4
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x1e8c) завершился с кодом 0 (0x0).
Отправка 2
Получение 2
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x470) завершился с кодом 0 (0x0).
Отправка 3
Получение 3
Поток &amp;#39;&amp;lt;Без имени&amp;gt;&amp;#39; (0x1f20) завершился с кодом 0 (0x0).&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Мне кажется такого же не должно быть.&lt;br /&gt;Или я где то не прав?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>