Я нашел еще один способ синхронизации потока из исходного кода сильного экрана. Он синхронизирует поток, изменяя политику расписания потока (SCHED_FIFO
). Имеет ли он преимущество перед способом mutex
?Синхронизация потока с изменением приоритета расписания
int oldpolicy;
struct sched_param oldparams, params;
pthread_getschedparam(thread_id, &oldpolicy, &oldparams);
params.__sched_priority = sched_get_priority_max(SCHED_FIFO);
pthread_setschedparam(thread_id, SCHED_FIFO, ¶ms);
...
critical section
...
pthread_setschedparam(thread_id, oldpolicy, &oldparams);
PS: strongswan использование таНос крюк для обнаружения утечек памяти. Чтобы поддерживать многопоточность, он использует этот способ для синхронизации потоков.
PPS: Кажется, что они изменили код. Этот фрагмент кода из версии Strongswan 4.5.0.
Нет. Это необычный способ и может повлиять на всю систему. – Chen
Просто не делай этого. –
Непонятно, что вы подразумеваете под «синхронизирующей нитью». –