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 }
    28     

    运行测试

      

    小结

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

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

  • 相关阅读:
    BZOJ4036 HAOI2015按位或(概率期望+容斥原理)
    洛谷p2661信息传递题解
    洛谷P1434滑雪题解及记忆化搜索的基本步骤
    二分图最大匹配
    线段树

    图论基本算法
    并查集
    RMQ--ST表
    矩阵快速幂和矩阵乘法
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3673077.html
Copyright © 2011-2022 走看看