Re: Спин-блокировки
От: Аноним  
Дата: 30.01.07 18:29
Оценка:
Здравствуйте, Alex Fedotov, Вы писали:

AF>Если мы добавим спин-блокировку, то только отдалим тот момент, когда второй поток произведет неизбежное переключение контекста и первый поток освободит критическую секцию.

Извиняюсь что поднимаю старую тему, но никак не могу понять почему невозможен такой вариант?
       -+------+---------+------------------------------------------------+-
        |      |         | Первый поток исчерпал свой time slice, поэтому |
CPU 1:  | Вход | Вставка | происходит переключение контекста на второй    |   -->
        |      |         | поток                                          | 
       -+------+---------+------------------------------------------------+-
         \                          первый поток                         / \

       -+------------------------------------------------------------+----------+-------+-   -+-
        | Неудачная попытка входа, за которой следует выполнение     |          |       |     |
 -->    | спин-блокировки, со spincount=100 (допустим выполнилось    | элемента | Выход | ... |   -->
        | 50 итераций из 100 до исчерпания time slice)               |          |       |     |
       -+------------------------------------------------------------+----------+-------+-   -+-
       / \                        второй поток                      / \     первый поток

       -+------------------------------------------------+----------------------------------------------------+-   -+-
        | Первый поток исчерпал свой time slice, поэтому | Началось выполнение 51-й итерации спин-блокировки, |     |
 -->    | происходит переключение контекста на второй    |  на которой обнаружилось что CS не занята.         | ... | -->
        | поток                                          |  Т.о. обошлись без перехода в kernel mode          |     |
       -+------------------------------------------------+----------------------------------------------------+-   -+-
                   первый поток                         / \         второй поток
                   
       -+------+------------------+-------+-
        |      |                  |       |
 -->    | Вход | Вставка элемента | Выход | ... 
        |      |                  |       |
       -+------+------------------+-------+-
                 второй поток
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.