Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет yigal_s ([info]yigal_s)
@ 2010-10-09 03:46:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
мультитред: интерлоки на дровах
внезапно оказалось, что пишу я код под процессор, у которого кроме операции 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, и можно садиться писать диссертацию.


(Добавить комментарий)


[info]mediant@lj
2010-10-09 09:00 (ссылка)
гы. не заработает :D

(Ответить) (Ветвь дискуссии)


[info]yigal_s@lj
2010-10-09 10:34 (ссылка)
ну я там пару ошибок раскидал, да. ;-)

Но идея-то работающая!?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]mediant@lj
2010-10-10 02:05 (ссылка)
нет

(Ответить) (Уровень выше)


[info]disbalanced@lj
2010-10-09 17:21 (ссылка)
Зочем ви тгавите???

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yigal_s@lj
2010-10-09 17:36 (ссылка)
я думал, он дебагирует

(Ответить) (Уровень выше)


[info]mediant@lj
2010-10-10 02:04 (ссылка)
дядю степу помнишь, сцуко? так вот, ...

(Ответить) (Уровень выше)