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

  • 相关阅读:
    iis 5.0 不能运行 asp.net 的 原因
    股票在线讨论
    adsl 加 路由器 网关不能上网的 原因
    汽车英语
    势与子的辩证法
    中国上海的黑心培训学校
    excel 里的 图表的使用
    带宽 下载速度 比特 率 换算 速度
    硬盘分区表修复秘籍
    Bootstrap a标签的单击时停止传播事件
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3673077.html
Copyright © 2011-2022 走看看