阅读量:0
在Ubuntu上编译C++程序时,如果需要处理多线程问题,可以使用C++11标准中的<thread>
库
- 包含头文件:
#include <iostream> #include <thread> #include <vector> #include <mutex>
- 定义一个互斥量,用于同步输出:
std::mutex mtx;
- 编写一个可以在线程中执行的函数:
void print_numbers(int start, int end) { for (int i = start; i <= end; ++i) { std::unique_lock<std::mutex> lock(mtx); std::cout << "Thread " << std::this_thread::get_id() << ": "<< i << std::endl; lock.unlock(); } }
- 在
main
函数中创建多个线程并启动它们:
int main() { const int num_threads = 4; const int numbers_per_thread = 10; std::vector<std::thread> threads; int range = numbers_per_thread * num_threads; int step = range / num_threads; for (int i = 0; i < num_threads; ++i) { int start = i * step + 1; int end = (i == num_threads - 1) ? range : (i + 1) * step; threads.emplace_back(print_numbers, start, end); } // 等待所有线程完成 for (auto& t : threads) { if (t.joinable()) { t.join(); } } return 0; }
- 使用g++编译器编译代码:
g++ -std=c++11 -pthread your_source_file.cpp -o output_binary
在这个示例中,我们创建了一个可以在线程中运行的函数print_numbers
,并在main
函数中创建了多个线程来执行这个函数。我们还使用了互斥量mtx
来同步输出,确保在同一时间只有一个线程可以访问std::cout
。
注意,我们在编译时添加了-std=c++11
和-pthread
选项。-std=c++11
告诉编译器我们使用的是C++11标准,而-pthread
选项告诉编译器链接线程库。