Мне нужно разработать приложение, которое пытается эмулировать поток выполнения встроенной цели. Эта цель имеет 2 уровня приоритета: самый высокий из них имеет приоритет над самым низким. Низкий уровень приоритета управляется с помощью циклического планировщика, который дает 1 мс выполнения каждому потоку по очереди.
Моя цель - написать библиотеку, которая будет предоставлять thread_create, thread_start и все системные вызовы, доступные на моей цели, и использовать функции POSIX для естественного воспроизведения поведения на стандартном ПК.
Таким образом, когда выполняется поток с высоким приоритетом, потоки с низким приоритетом должны быть приостановлены независимо от того, что они делают в этот самый момент. Ответственность за реализацию потока с низким приоритетом состоит в том, чтобы гарантировать, что он не будет нарушен.
Теперь приостановить поток обычно небезопасно, что объясняет, почему я не нашел никакой функции "suspend (pid)".
Я в основном представляю два решения проблемы:
- найти способ приостановить потоки с низким приоритетом при запуске потока с высоким приоритетом (и возобновить их, когда больше нет действий с высоким приоритетом)
- периодически вызывать очень маленькую функцию «suspend_if_needed» в моем низкоприоритетном коде, и всякий раз, когда должен запускаться высокоприоритетный процесс, дождаться, пока весь низкоприоритетный процесс вызовет эту функцию и будет приостановлен, выполнить как единый высокоприоритетный поток, а затем возобновить их всех.
Даже если это не так чисто, мне очень нравится второе решение, но все же есть одна проблема: как вызвать функцию везде, не меняя весь мой код?
Интересно, есть ли простой способ сделать это, что-то вроде отладочного кода: добавить вызов ловушки на каждую выполняемую строку, которая проверяет флаг, и запускать определенный код при изменении этого флага?
Я был бы очень рад, если бы было простое решение этой проблемы, поскольку мне действительно нужно быть репрезентативным с поведением целевого потока выполнения ...
Заранее спасибо,
Goulou.