进程之间<1>
来源:互联网 发布:c语言面向过程 编辑:程序博客网 时间:2024/05/21 10:00
调用fork之后, 生成的子进程继承了父亲的之前定义的句柄、局部变量、环境变量。也就是进程空间中,所有当前的数据。之后大家分道扬镳,各自为政。以下示例,展示了一种共享输出流造成的竞态。
/* * @FileName: race.c * @Author: wzj * @Brief: * 1.1.演示一种简单的进程间竞态, * * * * * @History: * * * * @Date: 2012年06月03日星期日09:36:15 * */ #include <unistd.h>#include <stdio.h>#include <stdlib.h>static void charatatime(char*);intmain(){pid_t pid;if ((pid = fork()) < 0){printf("fork failed \n");return -1;} else if(pid == 0) {charatatime("output from child\n");} else {charatatime("output from parent\n");printf("---------------------------------\n\n");}return 0;}static void charatatime(char* str){char* ptr;int c;//设置输出流为无缓冲区的,这样每次调用putc都会立即输出到终端setbuf(stdout, NULL);for(ptr = str; (c = *ptr++); ){putc(c, stdout);}}
编译运行之后,打印到终端上的字符可能是乱序的。为什么?fork之后,子进程将文件描述符表复制了一份,但是这两份文件描述符表,指向的是同一份打开文件表,而这个表,是所有进程共享的(当然了,终端有些特殊,一个会话的所有进程共享一个终端),这种描述符的继承机制,间接导致了这种竞态的产生。而对于打开文件表的共享,则要求我们访问文件之前,一定要确保其安全性,必要的话使用文件锁进行保护。
那么,有那些进程间临界区保护的手段呢?
- 进程之间<1>
- 线程之间、进程之间通信
- 进程之间通讯方法
- 两个进程之间通信
- 进程之间的通讯
- 进程之间通讯问题
- 进程之间的通信
- 进程之间 通信方式
- 进程之间数据共享
- 进程之间如何通信
- 进程之间的通信
- Handler进程之间通信
- 进程之间的通信
- 进程之间的通信
- 进程之间的通信
- Python 进程线程之间通信方式(1,基于队列的)
- 线程之间和进程之间的同步
- 线程之间通信、进程之间通信
- 深搜和广搜的区别和中心思想
- EI英文摘要
- SPOJ694 Distinct Substrings, 后缀数组, 不相同的子串的个数
- 学习GNU Emacs命令速查表(五)
- Android 如何建立你的菜单
- 进程之间<1>
- decode简单用法
- Eclipse:Could not create the view: Plug-in org.eclipse.jdt.ui was unable to load class org.eclipse.j
- 20120603命令行下线程调用代码
- [Lubuntu]解决Conky在Lubuntu下的问题(LXDE + OpenBox + PCManFM)
- 利用synchronized实现多线程同步
- c内嵌汇编
- 利用lock实现多线程同步
- SNIFFER帮助理解NAT(WIN2000)