21xrx.com
2025-04-01 12:43:37 Tuesday
文章检索 我的文章 写文章
C++11多线程经典案例
2023-06-27 08:55:16 深夜i     12     0
C++11 多线程 经典案例

C++11多线程是现代编程中不可或缺的一部分,它是一种非常强大的工具,可以帮助程序员在程序中实现并发性,以提高程序的性能。本文将介绍一些经典的C++11多线程案例,帮助初学者更好地理解如何使用这个工具。

1. 简单的线程创建和销毁

C++11允许程序员轻松地创建和销毁线程,而不需要繁琐的操作。下面是一个简单的示例,用于创建一个线程并立即销毁它。

#include <iostream>
#include <thread>
using namespace std;
void runThread() {
  cout << "Thread is running.\n";
}
int main() {
  thread t(runThread);    //创建线程
  t.join();          //等待线程结束
  return 0;
}

这个示例演示了如何创建一个线程。首先,我们定义了一个名为runThread的函数作为线程的执行体,然后使用std::thread类创建线程并将函数runThread分配给线程。最后,我们调用join()函数,等待线程执行完成并将其销毁。

2. 多个线程的协同工作

在许多实际应用程序中,需要使用多个线程共同完成任务。在这种情况下,C++11允许程序员将多个线程协同工作来完成任务。下面是一个简单的示例,用于创建两个线程并让它们共同工作。

#include <iostream>
#include <thread>
using namespace std;
void function_A() {
  cout << "Function A is running.\n";
}
void function_B() {
  cout << "Function B is running.\n";
}
int main() {
  thread t1(function_A);
  thread t2(function_B);
  t1.join();
  t2.join();
  return 0;
}

在上面的示例中,我们创建了两个线程t1和t2,分别执行函数function_A和function_B。接下来,我们等待这两个线程完成,

这个例子演示了如何将多个线程组合起来共同工作。程序员可以使用这种技术来实现复杂的并发操作。

3. 使用互斥体和条件变量实现线程同步

在实际应用程序中,常常需要使用互斥体和条件变量保护共享资源,从而实现线程同步。下面是一个简单的示例,演示了如何使用互斥体和条件变量实现线程同步。

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;
mutex mtx;
condition_variable cv;
bool ready = false;
void worker_thread() {
  unique_lock<mutex> lock(mtx);
  while (!ready) {
    cv.wait(lock);
  }
  cout << "Worker thread is processing data.\n";
}
int main() {
  thread worker(worker_thread);
  //主线程执行某些操作
  this_thread::sleep_for(chrono::seconds(3));
  //通知worker线程准备工作
  {
    lock_guard<mutex> lock(mtx);
    ready = true;
  }
  cv.notify_one();
  worker.join();
  return 0;
}

在上面的示例中,我们创建了一个名为worker的线程,它被阻塞等待条件变量cv被通知。在主线程中,我们执行某些操作然后等待3秒钟,然后将变量ready设置为true,并通过条件变量cv通知worker线程。然后worker线程被唤醒,开始处理数据。

这个例子演示了如何使用互斥体和条件变量实现线程同步。程序员可以使用这种技术来保护共享资源并避免竞态条件。

总之,C++11多线程是一种非常强大的工具,可以帮助程序员实现并发性和提高程序的性能。本文介绍了几个经典的案例,帮助初学者更好地了解如何使用这个工具。开始使用C++11多线程,你会发现它能够大幅提高你的程序性能,同时还可以操控更加灵活和精确。

  
  
下一篇: C++流缓冲区

评论区

请求出错了