• 操作系统之线程和进程


    创建线程

    C++标准库提供了一个多线程支持库,其中包括创建和管理线程的功能。你可以使用 头文件中的 std::thread 类来创建新线程。以下是一个示例:

    #include 
    #include 
    
    void threadFunction() {
        // 这是新线程的执行函数
        std::cout << "Hello from thread!" << std::endl;
    }
    
    int main() {
        // 创建新线程并启动它
        std::thread t(threadFunction);
    
        // 主线程继续执行
        std::cout << "Hello from main!" << std::endl;
    
        // 等待新线程完成
        t.join();
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在上面的示例中,程序员使用 std::thread 类创建了一个新线程,并将 threadFunction 函数作为新线程的执行函数。

    创建进程

    C++标准库本身不提供创建进程的直接支持,但你可以使用操作系统提供的函数来创建新进程。在Unix/Linux系统中,可以使用 fork() 函数来创建子进程。在Windows系统中,可以使用 CreateProcess() 函数来创建新进程。以下是一个简单的示例:

    在Unix/Linux系统中创建进程:

    #include 
    #include  // for fork()
    
    int main() {
        pid_t childPID = fork(); // 创建子进程
    
        if (childPID == 0) {
            // 子进程的代码
            std::cout << "Hello from child process!" << std::endl;
        } else if (childPID > 0) {
            // 父进程的代码
            std::cout << "Hello from parent process!" << std::endl;
        } else {
            // 创建进程失败的处理代码
            std::cerr << "Failed to create child process." << std::endl;
            return 1;
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在Windows系统中创建进程需要使用Windows API,示例略微复杂,需要调用 CreateProcess() 等函数。请注意,不同的操作系统和编译器可能需要不同的方法来创建进程。

    在RK3308芯片上,要创建新的进程,你需要使用Linux操作系统提供的进程管理功能。通常,在Linux中,可以使用系统调用来创建新进程。下面是一种在Linux中创建新进程的基本方法:

    #include 
    #include 
    #include 
    
    int main() {
        pid_t child_pid;
    
        child_pid = fork(); // 创建子进程
    
        if (child_pid < 0) {
            perror("Fork failed");
            exit(1);
        } else if (child_pid == 0) {
            // 子进程的代码
            printf("Hello from child process! (PID: %d)\n", getpid());
            // 在子进程中执行其他任务
            // ...
            exit(0); // 子进程退出
        } else {
            // 父进程的代码
            printf("Hello from parent process! (PID: %d)\n", getpid());
            // 父进程可以继续执行其他任务
            // ...
            // 等待子进程结束
            wait(NULL);
            printf("Child process completed.\n");
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这个示例中,fork() 函数被用于创建一个新的子进程。子进程会复制父进程的代码和数据,并从 fork() 返回时继续执行。你可以在子进程中执行其他任务,然后使用 exit() 来退出子进程。

    请注意,在RK3308芯片上的Linux系统中,具体的创建进程方式可能会受到系统配置和权限的限制,因此确保你有足够的权限来创建新进程。另外,要注意管理和维护进程,以防止资源泄漏和意外问题。

  • 相关阅读:
    网络编程概述及Http协议
    《解密并行和分布式深度学习:深度并发分析》摘要记录
    计算机毕设 flink大数据淘宝用户行为数据实时分析与可视化
    Acwing-42. 栈的压入、弹出序列
    LeetCode每日一题(2161. Partition Array According to Given Pivot)
    毕业设计 基于单片机的地震探测器系统 - stm32 物联网 嵌入式
    基于Springboot+Vue实现高校疫情防控系统
    【OpenCV】-重映射
    【 GMDH预测】 基于GMDH实现时间序列预测附matlab代码
    基于springboot+vue的仓储物流系统
  • 原文地址:https://blog.csdn.net/qq_42244167/article/details/133349955