您的位置:首页 > 其它

fork子进程与子线程在共享内存中的区别

2013-12-22 14:47 337 查看

前言

这两周做了很多关于共享内存,fork子进程与线程的工作,收获很大。先记录个小问题,关于主线程中fork子进程与子线程在共享内存中更新数据的问题。这些知识在书中是都能够了解到的,但如果没有亲身遭遇或者实践过,绝对不会有深切的感受。

子进程与子线程在共享内存中的区别

简单来说,有两个进程A与B,A与B通过共享内存方式实现进程间数据交换。 同时,进程A通过消息队列实时监听的进程B数据更新通知,然后进行对共享内存中的数据操作。最后,主进程通过Socket方式对进程A的数据进行访问。

实现方式一:

进程A通过fork产生的子进程实现对进程B的实时监听。整体过程如下图:



实现方式二:

进程A通过pthreadcreate创建子线程,由线程实现对进程B的实时监听。整体过程如下图:



测试demo

下面是关于fork进程时,用作小测试的程序:

#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct _table
{
	int a;
	int b;
}table;
 
void main()
{
	int state;
	pid_t pid = -1;
	table *test = NULL;

	test = (table *)malloc(sizeof(table));
	
	if (!fork())
	{
		/* child process */
		test->a = 1;
		test->b = 100;
		printf("child\n");
		printf("test->a = %d\n", test->a);
		printf("test->b = %d\n", test->b);
		exit(0);
	}

	wait(&state);
	if (pid)
	{       /* father process */
		printf("father\n");
		printf("test->a = %d\n", test->a);
		printf("test->b = %d\n", test->b);
	}
}


结果如下:





总结

简单来说就是,fork子进程共享父进程资源,但涉及内存操作时,会拥有自己的独立进程空间;子线程则属于主进程空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: