一起talk C栗子吧(第九十 三回:C语言实例--进程间通信之临界资源)
2016-01-08 22:54
295 查看
各位看官们,大家好,前面章回中咱们说的是使用信号和管道进行进程间通信的例子,这一回咱们说的例子是:进程间通信之临界资源。闲话休提,言归正转。让我们一起talk C栗子吧!
我们首先介绍一下,什么是临界资源。临界资源是一种比较稀缺的资源,它可以被多个进程使用,但是同某个时间段内只能被一个进程使用。因此,我们也称临界资源为共享资源。比如打印机就是一种临界资源。它可以被多个进程使用,但是在某段时间内只能有一个进程在使用打印机,不然,打印出的内容就乱了。
为什么要介绍临界资源呢?临界资源和进程之间的通信有什么关系呢?
大家还记得我们在前面章回中说过的内容吗?关于进程之间的通信,有三个问题需要解决:(参见第八十三回)
1.进程之间如何通信;
2.进程之间如何使用临界资源;
3.进程之间如何有序地执行某项任务;
我们在前面的章回中介绍了信号和管道,并且详细介绍了如何使用信号和管道在进程之间发送消息和数据。其实这就是使用信号和管道进行进程间的通信。我们在前面章回中介绍这些内容就是为了解决进程之间通信的第一个问题:进程之间如何通信。
现在呢,这个问题已经解决,我们需要解决进程之间通信的第二个问题:进程之间如何使用临界资源。这就是我给大家介绍临界资源的原因。
举个例子, 我们在vim中编辑test.c文件,并且在该文件中编写一个简单的程序,具体的内容如下:
如果我们在同一个时间内使用gedit也打开test.c文件,并且写入以下内容:
我们把test.c文件当作一种临界资源,那么同时使用vim和gedit编辑test.c文件,vim和gedit会启动相关的进程。因此,我们可以看作是两个进程在使用临界资源。那么这两个进程同时使用该临界资源,文件中究竟是什么内容呢?
实际上vim和gedit这两个进程会使用专门的方法来访问该临界资源,这样就能保证了临界资源内的内容在两个进程中是一致的。那么它们使用什么方法访问临界资源呢?我们在接下来的章回中会介绍访问临界资源的两种方法:共享内存和消息队列。
各位看官,关于进程间通信之临界资源的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
我们首先介绍一下,什么是临界资源。临界资源是一种比较稀缺的资源,它可以被多个进程使用,但是同某个时间段内只能被一个进程使用。因此,我们也称临界资源为共享资源。比如打印机就是一种临界资源。它可以被多个进程使用,但是在某段时间内只能有一个进程在使用打印机,不然,打印出的内容就乱了。
为什么要介绍临界资源呢?临界资源和进程之间的通信有什么关系呢?
大家还记得我们在前面章回中说过的内容吗?关于进程之间的通信,有三个问题需要解决:(参见第八十三回)
1.进程之间如何通信;
2.进程之间如何使用临界资源;
3.进程之间如何有序地执行某项任务;
我们在前面的章回中介绍了信号和管道,并且详细介绍了如何使用信号和管道在进程之间发送消息和数据。其实这就是使用信号和管道进行进程间的通信。我们在前面章回中介绍这些内容就是为了解决进程之间通信的第一个问题:进程之间如何通信。
现在呢,这个问题已经解决,我们需要解决进程之间通信的第二个问题:进程之间如何使用临界资源。这就是我给大家介绍临界资源的原因。
举个例子, 我们在vim中编辑test.c文件,并且在该文件中编写一个简单的程序,具体的内容如下:
[code]int main() { printf("hello \n"); return 0; }
如果我们在同一个时间内使用gedit也打开test.c文件,并且写入以下内容:
[code]int main() { int a; printf("please input a value for a. \n"); scanf("%d",&a); return 0; }
我们把test.c文件当作一种临界资源,那么同时使用vim和gedit编辑test.c文件,vim和gedit会启动相关的进程。因此,我们可以看作是两个进程在使用临界资源。那么这两个进程同时使用该临界资源,文件中究竟是什么内容呢?
实际上vim和gedit这两个进程会使用专门的方法来访问该临界资源,这样就能保证了临界资源内的内容在两个进程中是一致的。那么它们使用什么方法访问临界资源呢?我们在接下来的章回中会介绍访问临界资源的两种方法:共享内存和消息队列。
各位看官,关于进程间通信之临界资源的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
相关文章推荐
- C语言字符的赋值与输出格式
- C/C++预处理指令#define #ifdef #ifndef #endif
- 关于标准C语言的预定义宏
- C++编程练习
- Sicily 1128. DICE
- c语言中static的作用(精辟分析)
- C++命名空间
- C++中explicit关键字的作用
- C语言复合字面量的使用
- C++数据类型与C#对应关系
- C++校门外的树
- C++11的右值引用
- C语言实现全排列
- C++ string substr()
- 回文字符串切割问题
- C++开发人脸性别识别教程(7)——搭建MFC框架之界面绘制
- 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/OmniCppComplete
- Sicily 1286. Pascal Library
- iOS学习第三天,C语言的学习
- (IOS自学)C语言基础学习(二)