ubuntu编译c++时如何处理多线程问题

avatar
作者
猴君
阅读量:0

在Ubuntu上编译C++程序时,如果需要处理多线程问题,可以使用C++11标准中的<thread>

  1. 包含头文件:
#include <iostream> #include <thread> #include <vector> #include <mutex> 
  1. 定义一个互斥量,用于同步输出:
std::mutex mtx; 
  1. 编写一个可以在线程中执行的函数:
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();     } } 
  1. 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; } 
  1. 使用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选项告诉编译器链接线程库。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!