用fork模拟线程()

时间:2011-07-28 15:41:44

标签: c++ c multithreading fork

您对“fork()函数”“共享内存”阻止

模拟主题的想法是什么? >

有可能吗?

为程序执行此操作有多合理? (我的意思是,它会运作良好吗??)

4 个答案:

答案 0 :(得分:4)

对于初学者,请不要mix a thread and fork()

fork为您提供了一个全新的流程,它是当前流程的副本,具有相同的代码段。随着内存映像的更改(通常这是由于两个进程的不同行为),您可以分离内存映像,但可执行代码保持不变。除非使用某些进程间通信(IPC)原语,否则任务不共享内存。

相反,线程是同一任务的另一个执行线程。一个任务可以有多个线程,任务内存对象在线程之间共享,因此必须通过一些原始和同步对象访问共享数据,以避免数据损坏。

答案 1 :(得分:2)

是的,这是可能的,但我无法想象这是一个好主意,测试真的很痛苦。

如果你有一个共享堆,并确保所有信号量等都在堆中分配,而不是堆栈,那么没有固有的理由你不能做类似的事情。但是会有一些棘手的差异。

例如,您在多线程程序中的中断处理程序中执行的任何操作都可以更改所有线程使用的数据,而在分叉程序中,您必须发送多个中断,这些中断将在不同时间捕获,并可能导致意想不到的影响。

如果您需要线程行为,只需使用线程。

答案 2 :(得分:1)

AFAIK,fork将使用自己的上下文,堆栈等创建一个单独的进程。取决于“模拟”的意思......

您可能需要查看此内容:http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them

答案 3 :(得分:1)

这里的一些答案集中在“不要混合叉子和线程”。但我读到你的问题的方式是:“你能使用两个不同的进程,并且仍然可以快速方便地与它们之间的共享内存进行通信,就像线程如何访问彼此的内存一样?”

答案是,是的,你可以,但你必须记住要明确标记你想要共享的内存区域。您不能只在进程之间共享变量。此外,您可以在彼此不相关的进程之间以这种方式进行通信。它不仅限于彼此分开的流程。

查看shared memory or "shm"