yigal_s' Journal
 
[Most Recent Entries] [Calendar View] [Friends View]

Saturday, October 9th, 2010

    Time Event
    3:46a
    мультитред: интерлоки на дровах
    внезапно оказалось, что пишу я код под процессор, у которого кроме операции InterlockedExchange ничего интерлоканного и нет. Это, значица, 2-е десятилетие 21го века на дворе, а у нас лошади не сёдланы даже.

    Стало мне от этого немного грустно, и вздумалось реализовать все остальные интерлок-операции через эту единственную.

    Начал я с InterlockedAdd. Вот такая штука получилась (пишу коряво, лишь чтобы идею передать). Не знаю, заработает ли, но по идее, должно ;-)

    LONG InterlockedExchangeAdd(int *pval, int delta)
    {
       int cur = *pval;
    never_again:
       int result = cur + delta;
       int newVal = InterlockedExchange(pval, result); // aka asm xchg
       if( newVal != cur )
       {
           delta = newVal - cur;
           cur = newVal;
           goto never_again;
       }
       return cur; 
    }
    

    Теперь осталось сымплементировать InterlockedComparedExchange, и можно садиться писать диссертацию.

    Imported event Original

    << Previous Day 2010/10/09
    [Calendar]
    Next Day >>

About LJ.Rossia.org