Parallel processing 避免在linux中切换共享资源的应用程序[进程]

Parallel processing 避免在linux中切换共享资源的应用程序[进程],parallel-processing,embedded-linux,embedded-resource,interprocess,inter-process-communicat,Parallel Processing,Embedded Linux,Embedded Resource,Interprocess,Inter Process Communicat,共享资源用于两个应用程序进程A和进程B。为了避免争用情况,决定在执行处理共享资源的代码部分时禁用上下文切换,并在退出进程的共享部分后再次启用进程切换 但不知道如何避免流程切换到另一个流程,在执行共享资源部分时,在退出流程的共享部分后再次启用流程切换 或者有没有更好的方法来避免比赛状态 问候, 学习者对于所有用户空间应用程序和绝大多数内核代码,不能禁用上下文切换是有效的。原因是上下文切换不是应用程序的责任,而是系统操作的责任 在您提到的场景中,应该使用互斥锁。所有进程都必须遵循这样的约定:在访问共

共享资源用于两个应用程序进程A和进程B。为了避免争用情况,决定在执行处理共享资源的代码部分时禁用上下文切换,并在退出进程的共享部分后再次启用进程切换

但不知道如何避免流程切换到另一个流程,在执行共享资源部分时,在退出流程的共享部分后再次启用流程切换

或者有没有更好的方法来避免比赛状态

问候,

学习者

对于所有用户空间应用程序和绝大多数内核代码,不能禁用上下文切换是有效的。原因是上下文切换不是应用程序的责任,而是系统操作的责任

在您提到的场景中,应该使用互斥锁。所有进程都必须遵循这样的约定:在访问共享资源之前,它们获取互斥体,在访问完共享资源之后,它们释放互斥体

假设一个访问共享资源的应用程序获得了互斥锁,并且正在对共享资源进行一些处理,操作系统执行了上下文切换,从而停止了应用程序对共享资源的处理。操作系统可以安排其他想要访问共享资源的进程,但它们将处于等待状态,等待释放互斥,并且这些进程都不会对共享资源执行任何操作。在一定数量的上下文切换之后,操作系统将再次调度原始应用程序,该应用程序将继续处理共享资源。这将一直持续到原始应用程序最终释放互斥锁为止。然后,其他一些进程将开始按设计的顺序访问共享资源

例如,如果你想更权威、更详细地解释类似场景的原因,你可以观看

希望这有帮助

但不知道如何避免流程切换到另一个流程,在执行共享资源部分时,在退出流程的共享部分后再次启用流程切换

你不能直接这么做。通过内核帮助,您可以做您想做的事情。例如,等待互斥锁,或通过其他方式进行IPC(进程间通信)

如果这还不够“好”,您甚至可以制作自己的内核驱动程序,该驱动程序具有您想要的语义。内核可以在“睡眠”和“运行”之间移动进程。但是,在考虑编写自己的内核驱动程序之前,应该有充分的理由说明现有方法不起作用

或者有没有更好的方法来避免比赛状态


避免种族冲突完全是为了取舍。内核有许多不同的IPC方法,每种方法都有不同的特点。找一本关于IPC的好书,看看Postgres是如何扩展到许多处理器的。

我建议研究命名信号量。这将允许您确保关键部分的互斥性。

您需要想出一个更好的主意,因为在用户模式下无法做到这一点。您有什么想法要做吗?而不是试图阻止上下文从繁忙的过程中切换(这是不允许的),将注意力集中在防止切换到在另一方完成关键任务之前不应运行的流程上。对同步机制的阻塞调用在您准备好让该进程继续之前不会返回。为什么不使用互斥、信号量或类似机制呢?对于我控制的应用程序来说,这是可以的。假设,如果我提供Linux系统。用户可以安装自己的应用程序,用户也使用相同的共享资源,无论我在使用什么。因此,我没有任何控制权来避免共享资源访问。我怎样才能摆脱这样的比赛状态?