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;
}
在這個示例中,我們創建了兩個線程,每個線程執行一個不同的程序。請注意,這將在新進程中執行這些程序,而不是在當前進程中并行執行多個任務。