多线程学习(一)

本文详细介绍了C++中的fork函数,包括如何使用fork创建子进程,如何区分父进程和子进程,以及如何利用循环生成多个并列子进程。此外,还提供了获取当前进程ID(getpid)和父进程ID(getppid)的方法。

多线程在C++中占有很重要的一部分,也是很重要的一部分

fork函数

#include <iostream>
#include <unistd.h>
using namespace std;
int main(){
    pid_t pid;
    int num = 10;
    for(int i = 1;i <= 3;i++)
        cout << "befor i = " << i << endl;
    pid = fork();
    if(pid > 0){
        cout << "This is fater,pid = " << getpid() << endl;
        num++;
    }
    else if(pid == 0){
        cout << "This is son ,pid = " << getpid() << "  father id : "<< getppid() << endl;
        num++;
    }
    for(int i = 1; i <= 3; i++)
        cout << "end i = " << i << endl; 
    cout << "!!!!!!!" << "    " << num << endl;
}

fork()函数,分叉函数,生成一个和父进程一模一样的子进程,同时,这个函数有两个返回值,一个子函数的,一个父函数的。

fork()函数的两个头文件

#include<unistd.h>
#include<sys/types.h>

fork()函数的返回值是pid_t类型的,而且我们可以通过其值大小来分辨进程,父进程的返回值是其子进程的进程ID,子进程则为0。
同时,getpid():获取当前进程的ID,getppid()获取父进程的进程的ID。
每个进程都有自己对应的ID,我们在Linux下的终端就可以通过 ps aux这条指令来查询当前所有进程

#include <iostream>
#include <unistd.h>
using namespace std;
int main(){
    pid_t pid;
    int num = 100;
    int i;
    for(i = 1; i<=5;i++){
        pid = fork();
        if(pid == 0)
            break;
    }
    if(i == 1)
        cout << "This is first son id :" << getpid()  << endl;
    if(i == 6)
        cout << "This is father id :" << getpid() << endl;

}

同时,看这个例子,我们可以通过多次循环,由一个父进程得到多个并列的子进程,但是在循环的时候要注意一点,如果直接用循环来fork的话,就像我们最初的遇到的一个兔子生小兔子,小兔子第二年就可以生兔子。我们这个循环就要做一个判断,当它的进程ID判断出来为0后,我们就把他掐断( 这样就可以生出来许多并列的子进程了,当然,父进程都要是最后才会终止的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值