📜  在fork()中排序

📅  最后修改于: 2021-06-01 01:19:19             🧑  作者: Mango

先决条件– fork()的介绍,排序算法
问题陈述–编写程序以在父进程中对数字进行排序,并在子进程中打印未排序的数字。例如 :

Input : 5, 2, 3, 1, 4

Output :
Parent process 
sorted numbers are
1, 2, 3, 4, 5


Child process 
numbers to sort are
 5, 2, 3, 1, 4

说明–在这里,我们使用fork()函数创建两个进程,一个子进程和一个父进程。

  • fork()对于父进程返回大于0的值,因此我们可以执行排序操作。
  • 对于子进程fork()返回0,因此我们可以执行打印操作。
  • 在这里,我们使用一种简单的排序算法来按所需顺序对数字进行排序。
  • 我们使用fork()的返回值来知道哪个进程是一个子进程或哪个是父进程。

注–在某些情况下,不必先执行子进程,也不必先分配父进程的CPU,任何进程都可以在某个时间分配CPU。此外,进程ID在不同的执行过程中可能会有所不同。

代码 –

// C++ program to demonstrate sorting in parent and
// printing result in child processes using fork()
#include 
#include 
#include 
using namespace std;
  
// Driver code
int main()
{
    int a[] = { 1, 6, 3, 4, 9, 2, 7, 5, 8, 10 };
    int n = sizeof(a)/sizeof(a[0]);
    int id = fork();
  
    // Checking value of process id returned by fork
    if (id > 0) {
        cout << "Parent process \n";
  
        sort(a, a+n);
    
        // Displaying Array
        cout << " sorted numbers are ";
        for (int i = 0; i < n; i++) 
            cout << "\t" << a[i];
  
        cout << "\n";
  
    }
  
    // If n is 0 i.e. we are in child process
    else {
        cout << "Child process \n";
        cout << "\n  numbers to be sorted are ";
        for (int i = 0; i < n; i++) 
            cout << "\t" << a[i];       
    }
  
    return 0;
}

输出 –

Output :
Parent process 
sorted numbers are 1 2 3 4 5 6 7 8 9 10

Child process 
numbers to be sorted are 1 6 3 4 9 2 7 5 8 10
想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”