C++ 的 exec
函数本身并不能直接实现并行执行。exec
系列函数(如 execl
, execv
, execle
, execvp
等)用于在当前进程中替换一个新的程序,用新程序的命令行参数替换当前进程的命令行参数,然后执行新程序。这些函数都是同步执行的,也就是说,在执行 exec
之后,当前进程会等待新程序执行完毕后才返回。
然而,你可以通过创建多个进程并使用线程或其他同步机制来实现并行执行。例如,你可以使用 C++ 的 std::thread
类来创建多个线程,每个线程执行一个 exec
函数。这样,多个程序就可以并行执行了。但请注意,这样做会创建多个进程,而不是在一个进程中并行执行多个任务。
这是一个简单的示例,展示了如何使用 std::thread
和 execvp
实现并行执行:
#include <iostream>
#include <thread>
#include <vector>
#include <unistd.h>
void execute_program(const char* program, const char* arg) {
execvp(program, const_cast<char* const*>(arg));
perror("execvp");
exit(EXIT_FAILURE);
}
int main() {
std::vector<std::thread> threads;
// 创建两个线程,分别执行两个不同的程序
threads.emplace_back(execute_program, "program1", (char*[]){"arg1", nullptr});
threads.emplace_back(execute_program, "program2", (char*[]){"arg2", nullptr});
// 等待所有线程完成
for (auto& t : threads) {
t.join();
}
return 0;
}
在这个示例中,我们创建了两个线程,每个线程执行一个不同的程序。请注意,这将在新进程中执行这些程序,而不是在当前进程中并行执行多个任务。