C 通过更改计划优先级同步线程

C 通过更改计划优先级同步线程,c,linux,multithreading,C,Linux,Multithreading,我从strongswan的源代码中找到了另一种同步线程的方法。它通过更改线程的调度策略sched_FIFO来同步线程。它比互斥方式有什么优势吗 : PS:strongswan使用malloc钩子检测内存泄漏。为了支持多线程,它使用这种方式来同步线程 PPS:看来他们修改了代码。Strongswan 4.5.0版本中的那段代码。如果您有多个内核,它将被破坏,除非您将所有可能冲突的线程锁定到同一个内核。即使如此,如果阻塞I/O,它仍然会被破坏。例如,页面错误。糟糕。如果您有多个核心,那么它将被破坏,

我从strongswan的源代码中找到了另一种同步线程的方法。它通过更改线程的调度策略sched_FIFO来同步线程。它比互斥方式有什么优势吗

:

PS:strongswan使用malloc钩子检测内存泄漏。为了支持多线程,它使用这种方式来同步线程


PPS:看来他们修改了代码。Strongswan 4.5.0版本中的那段代码。

如果您有多个内核,它将被破坏,除非您将所有可能冲突的线程锁定到同一个内核。即使如此,如果阻塞I/O,它仍然会被破坏。例如,页面错误。糟糕。

如果您有多个核心,那么它将被破坏,除非您将所有可能冲突的线程锁定到同一个核心。即使如此,如果阻塞I/O,它仍然会被破坏。例如,页面错误。恶心。

这不会同步任何东西

这样做是为了防止在关键部分运行时线程被调度到CPU之外。因为我们现在有多个CPU,而且不同的线程可以在另一个CPU上运行,所以它根本不排除任何东西。它甚至没有完全阻止先占权;如果等待页面错误或其他IO,线程仍然可以休眠

这样做的原因是为了避免在计算非常重要的内容时让其他线程饥饿,否则其他线程将无法继续。它确实有助于这一原因,但它是一个非常专门的优先级反转案例搜索。

它不会同步任何内容

这样做是为了防止在关键部分运行时线程被调度到CPU之外。因为我们现在有多个CPU,而且不同的线程可以在另一个CPU上运行,所以它根本不排除任何东西。它甚至没有完全阻止先占权;如果等待页面错误或其他IO,线程仍然可以休眠


这样做的原因是为了避免在计算非常重要的内容时让其他线程饥饿,否则其他线程将无法继续。它确实有助于这一原因,但它是一种非常专门的优先级反转案例搜索。

否。这是一种不寻常的方式,可能会影响整个系统。不清楚同步线程是什么意思。@MaximYegorushkin我认为它意味着序列化。链接的源代码不包含列出的代码。它从哪里来?@JanHudec他们以前使用互斥。不。这是一种不寻常的方式,可能会影响整个系统。不清楚您所说的同步线程是什么意思。@MaximYegorushkin我认为这意味着序列化。链接的源代码不包含列出的代码。它从哪里来?@JanHudec他们以前使用互斥。它以多种方式被破坏。我懒得把它们都列出来。它在很多方面都被破坏了。我懒得把它们都列出来。
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, &params);

...
critical section
...

pthread_setschedparam(thread_id, oldpolicy, &oldparams);