- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
BOOL EnsureThreadIsSuspended (HANDLE hThread, Thread* pThread)
{
STATIC_CONTRACT_NOTHROW;
STATIC_CONTRACT_GC_NOTRIGGER;
WRAPPER_CONTRACT;
CONTEXT ctx;
ctx.ContextFlags = CONTEXT_INTEGER;
BOOL ret;
ret = ::GetThreadContext(hThread, &ctx);
return ret;
}
и сборщик мусора
это точно с++?
Такие пространства имён я больше нигде не видел.
Может, это какой-нибудь Managed C++?
И мы не можем знать точно, что означает GC
я сам сторонник винапишные и прочие сишкоблядские высеры в крестосвятом коде так украшать
> это точно с++?
как человек который много лет делал многопоточность на виндах, я очень был рад обнаружить что на юнихах нет суспенда.
100% случаев использования SuspendThread() на виндах которые я видел были 100% ГК.
... в смысле "эмулировал аппаратные прерывания"? зачем user space софту нужны прерывания?? вся прелесть user space'а как раз и заключается в том что прерывания как бы и не существуют.
"Алсо, как останавливать поток для той же сборки мусора, например?"
так а зачем поток то суспендить? ява успешно это делает без суспендов. new просто подвисает на локе, ожидая когда GC кончит пулы чистить. и это только в том случае если new не смог найти куска свободной памяти.
Отлаживал операционочку в userspace.
> так а зачем поток то суспендить? ява успешно это делает без суспендов. new просто подвисает на локе, ожидая когда GC кончит пулы чистить. и это только в том случае если new не смог найти куска свободной памяти.
В .net они както там в фоновом режиме собирают. Я не вникал.
> Отлаживал операционочку в userspace.
ндя... извращенец. :)
JTAG не дешевле ли было купить? или как линух - запускать ядно под отладчиком, удаленно контролируемым через серийный порт? (удаленный протокол gdb я слышал тривиален.) или под *нихом сигналами эмулировать: там setjmp/друзья почти официально поддерживается.
по моему опыту такие извращения себя редко оправдывают. если код чистая логика, то его часто можно и в программу сконвертировать (что я делал для сетевых протоколов). а если код драйвера, то там извраты просто не помогают: заморочки железа софтом не эмулируются.
Просто была студенческая поделка просто вместо нудных лаб. Эмуляцию достаточно достоверную удалось сделать и даже сдать это дело не запускаяя на железе. Понятно, что тонкостей работы реально аппаратуры тут не сэмулируешь, а вытеснение потока по таймеру - вполне. С JTAGами и виртуалками возиться не хотелось.