Порядок выполнения потоков ожидания, заблокированных взаимным исключением

Извините, не может быть сделан с ShowGridLines - необходимо разработать содержавшие элементы.

самый веский довод:

в документах MSDN говорится, "Что только пунктирные линии доступны, потому что это свойство предназначается как средство проектирования для отладки проблем расположения и не предназначается для использования в производственном качественном коде. Если Вы хотите строки в Сетке, разрабатываете элементы в Сетке, чтобы иметь границы".

приложение B - Исходный код WPF:

Уведомление Кисти. Синий и Кисти. Желтый трудно кодированный в этом изолированном внутреннем классе, который Система. Windows. Средства управления. Использование сетки для проведения линий.

От Grid.cs

    /// <summary>
    /// Helper to render grid lines. 
    /// </summary>
    internal class GridLinesRenderer : DrawingVisual 
    { 
        /// <summary>
        /// Static initialization 
        /// </summary>
        static GridLinesRenderer()
        {
            s_oddDashPen = new Pen(Brushes.Blue, c_penWidth); 
            DoubleCollection oddDashArray = new DoubleCollection();
            oddDashArray.Add(c_dashLength); 
            oddDashArray.Add(c_dashLength); 
            s_oddDashPen.DashStyle = new DashStyle(oddDashArray, 0);
            s_oddDashPen.DashCap = PenLineCap.Flat; 
            s_oddDashPen.Freeze();

            s_evenDashPen = new Pen(Brushes.Yellow, c_penWidth);
            DoubleCollection evenDashArray = new DoubleCollection(); 
            evenDashArray.Add(c_dashLength);
            evenDashArray.Add(c_dashLength); 
            s_evenDashPen.DashStyle = new DashStyle(evenDashArray, c_dashLength); 
            s_evenDashPen.DashCap = PenLineCap.Flat;
            s_evenDashPen.Freeze(); 
        }
5
задан Steven Sudit 9 October 2009 в 17:47
поделиться

4 ответа

FIFO signaling leads to lock convoys. On newer versions of the Win32 API the convoy issue is addressed by macking mutexes and other synchrnonization primitives explicitly unfair (ie. no FIFO).

If more than one thread is waiting on a mutex, a waiting thread is selected. Do not assume a first-in, first-out (FIFO) order. External events such as kernel-mode APCs can change the wait заказ.

7
ответ дан 14 December 2019 в 08:55
поделиться

Да, если вам нужна очередь FIFO, вам потребуется реализовать собственный механизм очередей.

0
ответ дан 14 December 2019 в 08:55
поделиться

, если вы хотите, чтобы разблокировка происходила в порядке FIFO, вы можете использовать настраиваемую блокировку. В ACE существует блокировка FIFO; он называется ACE_Token, и, поскольку это открытый исходный код, возможно, вы можете использовать его в качестве эталонной реализации. Думаю, накладные расходы на его использование будут минимальными.

0
ответ дан 14 December 2019 в 08:55
поделиться

Способ Windows выполнять собственное планирование - использовать волокна. Основной поток будет ждать мьютекса, после его возврата вы явно вызываете SwitchToFiber из потокобезопасного QUEUE (FIFO).

  1. Поток, вызывающий SwitchToFiber, должен будет вызвать ConvertThreadToFiber.
  2. Функция в SwitchToFiber должна вызвать SwitchToFiber из ОЧЕРЕДЬ
0
ответ дан 14 December 2019 в 08:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: