在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++ -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
选项告诉编译器链接线程库。