Я пытаюсь перенести Thread_Metric в реальном времени из ExpressLogic в POSIX, чтобы сравнить патчи PREEMPT_RT для Linux, Xenomai и RTAI для моей диссертации. Они предоставляют исходный файл C со следующими функциями, которые вы должны реализовать, чтобы эталонный тест работал:
void tm_initialize(void (*test_initialization_function)(void));
int tm_thread_create(int thread_id, int priority, void (*entry_function)(void));
int tm_thread_resume(int thread_id);
int tm_thread_suspend(int thread_id);
void tm_thread_relinquish(void);
void tm_thread_sleep(int seconds);
int tm_queue_create(int queue_id);
int tm_queue_send(int queue_id, unsigned long *message_ptr);
int tm_queue_receive(int queue_id, unsigned long *message_ptr);
int tm_semaphore_create(int semaphore_id);
int tm_semaphore_get(int semaphore_id);
int tm_semaphore_put(int semaphore_id);
int tm_memory_pool_create(int pool_id);
int tm_memory_pool_allocate(int pool_id, unsigned char **memory_ptr);
int tm_memory_pool_deallocate(int pool_id, unsigned char *memory_ptr);
Прямо сейчас я пытаюсь реализовать функции tm_thread_suspend и tm_thread_resume, которые принимают на вход pthread. Я знаю, что вы можете приостановить поток с помощью подпрограмм pthread_mutex_lock и pthread_cond_wait, но вы должны вызывать их из функции start_function потока. Я новичок в таких вещах, и я вхожу в заблуждение. Любая помощь приветствуется.