- 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;
}
LispGovno 06.02.2013 09:53 # 0
Ccik 06.02.2013 11:13 # 0
tirinox 06.02.2013 12:19 # +1
defecate-plusplus 06.02.2013 12:53 # +1
и сборщик мусора
это точно с++?
Ccik 06.02.2013 13:03 # +1
absolut 06.02.2013 13:04 # +2
roman-kashitsyn 06.02.2013 13:05 # 0
Такие пространства имён я больше нигде не видел.
Может, это какой-нибудь Managed C++?
И мы не можем знать точно, что означает GC
defecate-plusplus 06.02.2013 13:09 # 0
я сам сторонник винапишные и прочие сишкоблядские высеры в крестосвятом коде так украшать
roman-kashitsyn 06.02.2013 13:14 # 0
> это точно с++?
Dummy00001 06.02.2013 17:31 # +2
как человек который много лет делал многопоточность на виндах, я очень был рад обнаружить что на юнихах нет суспенда.
100% случаев использования SuspendThread() на виндах которые я видел были 100% ГК.
Ccik 06.02.2013 23:51 # 0
Dummy00001 06.02.2013 23:59 # +1
... в смысле "эмулировал аппаратные прерывания"? зачем user space софту нужны прерывания?? вся прелесть user space'а как раз и заключается в том что прерывания как бы и не существуют.
"Алсо, как останавливать поток для той же сборки мусора, например?"
так а зачем поток то суспендить? ява успешно это делает без суспендов. new просто подвисает на локе, ожидая когда GC кончит пулы чистить. и это только в том случае если new не смог найти куска свободной памяти.
Ccik 07.02.2013 00:10 # 0
Отлаживал операционочку в userspace.
> так а зачем поток то суспендить? ява успешно это делает без суспендов. new просто подвисает на локе, ожидая когда GC кончит пулы чистить. и это только в том случае если new не смог найти куска свободной памяти.
В .net они както там в фоновом режиме собирают. Я не вникал.
Dummy00001 07.02.2013 00:23 # +1
> Отлаживал операционочку в userspace.
ндя... извращенец. :)
JTAG не дешевле ли было купить? или как линух - запускать ядно под отладчиком, удаленно контролируемым через серийный порт? (удаленный протокол gdb я слышал тривиален.) или под *нихом сигналами эмулировать: там setjmp/друзья почти официально поддерживается.
по моему опыту такие извращения себя редко оправдывают. если код чистая логика, то его часто можно и в программу сконвертировать (что я делал для сетевых протоколов). а если код драйвера, то там извраты просто не помогают: заморочки железа софтом не эмулируются.
Ccik 07.02.2013 00:38 # +1
Просто была студенческая поделка просто вместо нудных лаб. Эмуляцию достаточно достоверную удалось сделать и даже сдать это дело не запускаяя на железе. Понятно, что тонкостей работы реально аппаратуры тут не сэмулируешь, а вытеснение потока по таймеру - вполне. С JTAGами и виртуалками возиться не хотелось.
guest 15.02.2013 20:57 # +1
Ccik 17.02.2013 22:56 # 0
guest 26.02.2013 02:53 # +1
TarasB 07.02.2013 10:50 # 0
Ccik 07.02.2013 11:03 # 0
tirinox 07.02.2013 13:54 # 0
TarasB 07.02.2013 13:57 # +3
guest 26.02.2013 02:46 # 0