Я создал оболочку C для библиотеки C++ и вызываю эту оболочку C из своего управляемого кода C#. Проблема, с которой я столкнулся, заключается в том, что эта библиотека включает в себя тысячи итераций и длительное время выполнения. Очевидно, мне нужен способ связи с программой C# и обновления состояния обработки, выполняемой библиотекой C/C++.
Прямой подход будет возвращаться после фиксированного количества итераций, обновлять статус и снова вызывать оболочку C/C++. Но обработка зависит от некоторых структур данных на основе C++ STL, которые обновляются после каждой итерации. Мне не нужны эти структуры данных в моем управляемом коде, но очевидно, что они должны храниться в памяти для всех итераций.
Поэтому я не могу вернуться из оболочки C/C++, пока обработка не будет завершена, иначе структуры C++ будут освобождены...
Я думаю, что лучшим подходом было бы совместное использование некоторых переменных между управляемым и неуправляемым кодом и чтение статуса обработки каждые N итераций. Но это приводит к другой проблеме: как мне синхронизировать доступ к этой памяти?