在两个线程之间同步 Printf

Synchronize Printf between two threads

我正在尝试了解这些东西是如何工作的。我正在准备考试,但我的大学并没有真正解释清楚。

我正在尝试同步两个进程。我从一个简单的代码开始,它(应该)打印两个进程的 PID。为了确保它们真的同步,我做了这样一个过程,以便每个进程打印它的 PID 5 次,然后重新开始。

这是代码(抱歉,我使用的是虚拟机,所以copy/paste它很痛苦)

[img]https://i.ibb.co/55vL8vH/code.png[/img]

这是结果:

[img]https://i.ibb.co/7VZVPdp/result.png[/img]

如您所见,这是一个非常简单的代码,但我真的不知道为什么它不起作用。我猜(但我不确定)这就是为什么两个进程之间不共享互斥锁的原因……就像每个进程都有自己的互斥锁并且不与另一个进程合作一样。

这是操作系统中一个非常重要且广泛的概念,但我可以告诉您一些提示,以便您可以进一步搜索:

当你在你的代码中 fork() 时 OS 为新进程创建一个新的内存块,它是父进程内存的副本,这意味着变量是相同的,但如果你在另一个中更改其中一个process 它不会改变,你必须使用 inter-process communication concept for shared memory 才能在你的进程之间共享变量。