多线程学习(一)

来源:互联网 发布:淘宝采集软件收费吗 编辑:程序博客网 时间:2024/05/29 16:37

多线程在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后,我们就把他掐断( 这样就可以生出来许多并列的子进程了,当然,父进程都要是最后才会终止的

原创粉丝点击