Мне консультация нужна, есть процедура, нереентерабельная, и в неё из двух-трех потоков приходит вызов. Как мне блокировать остальные вызовы, пока я один отрабатываю?
Что-то вроде CriticalSection, пока он не завершился, все остальные вызовы холдятся.
Да есть, всякие Mutex, Critical Section и прочий вагон добра, м.б уже решал кто эту проблему?
Вот как выглядит в асме:
Non_reentrant_fn: push rcx rdx rbx
Lock (resource)
Blablabla...
Так вот пока я делаю push регистров, прилетает второй и третий вызов моей функции. Т.к стек общий, он тотально портится и программа крашится.
Без сохранения регистров вначале - никак, т.к Lock(resource) портит регистры.
Примерно такая же проблема, как с DOS, в котором нельзя было вызывать самого себя из-за нереентерабельности.
Как бы решить эту проблему?