在 C++ 中,线程和进程是有区别的:
-
进程:是操作系统分配资源的基本单位,包括代码、数据和系统资源。每个进程都有自己独立的地址空间,因此进程之间不能直接访问彼此的内存。
-
线程:是操作系统能够进行运算调度的最小单位。线程是进程的一个实体,是进程中的实际运行单位,线程拥有自己的堆栈和局部变量。线程之间可以直接访问彼此的内存。
在 C++ 中,std::thread 用于创建和管理线程,而不是进程。如果你需要创建进程,你可以使用操作系统提供的 API,例如在 Unix 系统上使用 fork() 函数,或者在 Windows 系统上使用 CreateProcess() 函数。
1、创建一个子进程:fork()
fork() 函数是一个标准的系统调用,用于在 Unix 和类 Unix 系统中创建新的进程。
以下是一个简单的例子,展示了如何使用 fork() 函数:
#include <iostream>
#include <unistd.h>
int main() {
pid_t pid;
pid = fork();
if (pid < 0) {
// fork() 失败
std::cerr << "fork() failed\n";
return 1;
} else if (pid == 0) {
// 子进程
std::cout << "This is the child process, pid: " << getpid() << "\n";
} else {
// 父进程
std::cout << "This is the parent process, pid: " << getpid() << ", child pid: " << pid << "\n";
}
return 0;
}
输出为:
xo@shahis1:~/demo$ vim fork_test.cpp
xo@shahis1:~/demo$ g++ fork_test.cpp -o fork_test
xo@shahis1:~/demo$ ./fork_test
This is the parent process, pid: 1821956, child pid: 1821957
This is the child process, pid: 1821957
在这个例子中,fork() 函数会创建一个新的进程,并返回两次:一次在父进程中返回子进程的 PID,一次在子进程中返回 0。你可以使用这个返回值来区分父进程和子进程,并执行不同的操作。
如果你在使用 fork() 函数时遇到了问题,你可能需要检查以下几点:
-
编译器和操作系统:确保你的代码在支持
fork()函数的系统上编译和运行。fork()函数是 Unix 和类 Unix 系统的标准库函数,不支持 Windows。 -
权限:确保你有足够的权限来创建新的进程。在某些系统上,你可能需要管理员权限才能使用
fork()函数。 -
错误处理:确保你正确处理了
fork()函数的错误情况。在上面的例子中,我们检查了pid的值是否小于 0,这表示fork()函数调用失败。
一个进程操作公共容器的例子:
#include <iostream>
#include <unistd.h>
#include <vector>
#include <mutex>
#include <sys/wait.h>
// 模拟一个容器
struct Container {
int value;
};
// 全局变量
std::vector<Container> containers;
std::mutex mtx;
// 进程A创建若干db container
void processA() {
std::cout &

最低0.47元/天 解锁文章
314

被折叠的 条评论
为什么被折叠?



