21xrx.com
2024-09-20 05:46:36 Friday
登录
文章检索 我的文章 写文章
C++11多线程经典案例
2023-06-27 08:55:16 深夜i     --     --
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++流缓冲区

评论区

{{item['qq_nickname']}}
()
回复
回复