我从 strongswan 的源代码中找到了另一种同步线程的方法。它通过更改线程的调度策略(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 使用 malloc hook 来检测内存泄漏。为了支持多线程,它使用这种方式来同步线程。
PPS:他们似乎修改了代码。来自 Strongswan 4.5.0 版本的那段代码。