В моей программе есть структура под названием clock_thread
, которая имеет решающее значение для моей системы потоков.Это в основном поток, который выполняет операции с постоянной скоростью.
Иногда некоторые функции необходимо синхронизировать с clock_thread
, но для этого им нужен текущий clock_thread
.Я не могу передать clock_thread
за аргументы.Я знаю, что могу получить текущий pthread
через pthread_self()
, но мне как-то нужно прикрепить указатель на pthread
, который указывает на структуру clock_thread
.
Единственный способ, которым я в настоящее время знаю, для достижения этой цели - это иметь глобальный массив, который отслеживает все clock_thread
с, и при необходимости сравнивать pthread
каждого clock_thread
с текущим pthread
с pthread_equal
.
Например, clock_thread
постоянно вызывает метод do_stuff()
, который теоретически может делать что угодно.Единственная цель clock_thread
- это вызов функции, она не имеет ничего общего с функциональностью функции.Затем эта функция может вызвать perform_write
, которая должна изменить состояние другого clock_thread.Таким образом, он должен знать ток clock_thread
, но do_stuff()
не должен пропускать ток clock_thread
полностью через его логику.В реальной функции код do_stuff
гораздо сложнее, и из-за стилистического выбора я не могу передать текущий clock_thread
в качестве аргумента.
struct clock_thread memory_thread;
void perform_read(uint16_t addr, uint16_t value) {
//Needs to sync with other thread
//But how
clock_thread_sync(???, memory_thread);
}
void do_stuff() {
//Do some stuff
perform_write(addr, 0x1234);
}
Есть ли лучший способ выполнитьэтот?Я бы хотел как можно больше избегать глобальных переменных.