Только сейчас заметил, что в lock путается очередь.
Вот простой код для проверки
Code
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("Отправка " + ii);
Thread.Sleep(3000);
Debug.WriteLine("Получение " + ii);
}
}
Результат
Code
Отправка 1
Получение 1
Поток '<Без имени>' (0x1c98) завершился с кодом 0 (0x0).
Отправка 10
Получение 10
Поток '<Без имени>' (0x1b28) завершился с кодом 0 (0x0).
Отправка 9
Получение 9
Поток '<Без имени>' (0x2350) завершился с кодом 0 (0x0).
Отправка 7
Получение 7
Поток '<Без имени>' (0x1d68) завершился с кодом 0 (0x0).
Отправка 8
Получение 8
Поток '<Без имени>' (0x2338) завершился с кодом 0 (0x0).
Отправка 6
Получение 6
Поток '<Без имени>' (0x20c4) завершился с кодом 0 (0x0).
Отправка 5
Получение 5
Поток '<Без имени>' (0x240) завершился с кодом 0 (0x0).
Отправка 4
Получение 4
Поток '<Без имени>' (0x1e8c) завершился с кодом 0 (0x0).
Отправка 2
Получение 2
Поток '<Без имени>' (0x470) завершился с кодом 0 (0x0).
Отправка 3
Получение 3
Поток '<Без имени>' (0x1f20) завершился с кодом 0 (0x0).
Мне кажется такого же не должно быть.
Или я где то не прав?