• 并发程序的基本实现( 多进程 )


    前言

      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

  • 相关阅读:
    [javascript] vuejs为输入框增加回车事件
    iview上的兼容性问题
    python+vscode安装与插件配置
    Chrome浏览器获取XPATH的方法----通过开发者工具获取
    使用谷歌浏览器定位xpath是否准确
    [PHP] xpath提取网页数据内容
    PHP中preg_match正则匹配的/u /i /s是什么意思
    Flink connect 算子实践
    DataStreamUtils 连续keyBy 优化
    Heartbeat原理及部署
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3673077.html
Copyright © 2020-2023  润新知