zoukankan      html  css  js  c++  java
  • 第十八章:并发程序的基本实现( 多进程 )

    前言

           Linux 是多道处理系统,当然能够在同一段时间内处理多个程序。

           本文将介绍具体该如何操作。

    fork 函数

           此函数的作用是创建一个子进程,调用后,调用进程和创建的新进程就会并发执行( 从调用处开始 )。它调用一次,却返回两次,一次是在调用进程内,返回子进程ID,另一次是在创建的新进程( 子进程 )内,返回 0。

           函数的具体说明请参阅相关文档。

    并发代码框架

     1 #include <stdio.h>
     2 #include <unistd.h>
     3 
     4 int main (void) {
     5 
     6     int pid;
     7 
     8     if ((pid = fork()) == 0) {
     9 
    10         /* 
    11          * 此处填写子进程代码 
    12         */ 
    13 
    14     }
    15     else if (pid < 0) {
    16 
    17         /* 
    18          * 此处填写错误处理代码 
    19         */ 
    20 
    21     }
    22     else {
    23 
    24         /* 
    25          * 此处填写父进程代码 
    26         */ 
    27 
    28     }
    29     
    30     return 0;
    31 }

    代码实现

      此程序将让两个进程交替的每隔 1 秒打印它们的各自进程 ID:

     1 #include <stdio.h>
     2 #include <unistd.h>
     3 
     4 int main (void) {
     5 
     6     int pid;
     7 
     8     if ((pid = fork()) == 0) {
     9         while (1) {
    10             sleep(1);
    11             printf("I am %d 
    ", getpid());
    12         }
    13     }
    14     else if (pid < 0) {
    15         printf("创建子进程失败
    ");
    16         return 1;
    17 
    18     }
    19     else {
    20         while (1) {
    21             sleep(1);
    22             printf("I am %d 
    ", getpid());
    23         }
    24     }
    25     
    26     return 0;
    27 }

    运行测试

           

    小结

           1. 本文讲述的是最简单最基本的并发实现,很多更复杂的并发实现都是基于这个框架的。

           2. 如果要确保子进程先运行,并且在启动子进程后立马 exec 一个新程序的话,请将 fork 换成 vfork。

  • 相关阅读:
    swift -- 静态变量static
    swift -- 单例+ lazy懒加载 + 第三方库
    swift -- 代理delegate
    swift -- 闭包
    swift -- 构造/析构函数
    swift -- 继承
    swift -- as / 扩展
    swift -- 类中的方法
    swift -- 类和结构体
    C 扩展库
  • 原文地址:https://www.cnblogs.com/muchen/p/6354566.html
Copyright © 2011-2022 走看看