21xrx.com
2024-09-20 00:49:57 Friday
登录
文章检索 我的文章 写文章
C++11多线程编程入门
2023-07-12 15:31:10 深夜i     --     --
C++11 多线程 编程 入门

C++11是一个强大的编程语言,支持多线程编程。多线程编程允许同时执行多个任务,提高程序的效率和性能。本文将介绍C++11中的多线程编程,包括线程的创建、互斥量和条件变量的使用。

线程的创建

在C++11中,创建一个线程非常简单,只需要使用std::thread类。下面是一个简单的例子:


#include <iostream>

#include <thread>

void hello()

  std::cout << "Hello

int main() {

  std::thread t(hello);

  t.join();

  return 0;

}

在这个例子中,我们创建了一个名为t的线程,并将其加入到当前线程中。线程t会执行hello函数,并输出"Hello, world!"。注意,我们使用了join函数来等待线程t执行完毕。

互斥量

在多线程编程中,共享的资源需要进行互斥。互斥量是一种解决资源共享问题的方案。C++11提供了std::mutex类来实现互斥量。下面是一个例子:


#include <iostream>

#include <thread>

#include <mutex>

std::mutex mtx;

void print(char c) {

  mtx.lock();

  for (int i = 0; i < 5; i++)

    std::cout << c << std::endl;

  

  mtx.unlock();

}

int main() {

  std::thread t1(print, 'A');

  std::thread t2(print, 'B');

  t1.join();

  t2.join();

  return 0;

}

在这个例子中,我们创建了两个线程t1和t2,它们会分别输出'A'和'B'。由于输出操作是共享的资源,我们使用了互斥量来保护它。当一个线程获得了互斥量的锁时,另一个线程就无法获得锁,直到第一个线程释放它。

条件变量

条件变量也是解决资源共享问题的一种方案。C++11提供了std::condition_variable类来实现条件变量。下面是一个例子:


#include <iostream>

#include <thread>

#include <mutex>

#include <condition_variable>

std::mutex mtx;

std::condition_variable cv;

void print(char c, int n) {

  std::unique_lock<std::mutex> lck(mtx);

  for (int i = 0; i < n; i++)

    std::cout << c << std::endl;

  

  cv.notify_one();

}

int main() {

  std::thread t1(print, 'A', 5);

  std::unique_lock<std::mutex> lck(mtx);

  cv.wait(lck);

  std::thread t2(print, 'B', 3);

  t1.join();

  t2.join();

  return 0;

}

在这个例子中,我们创建了两个线程t1和t2,它们会分别输出'A'和'B'。我们使用了条件变量cv来等待t1执行完毕后再执行t2。当一个线程调用wait函数时,它会释放锁并等待,直到条件变量满足时再次获取锁。

总结

C++11提供了很多多线程编程的工具,包括线程、互斥量和条件变量等。多线程编程可以提高程序的效率和性能,但也需要特别注意共享资源的互斥和同步。希望本文对C++11多线程编程有所启发。

  
  
下一篇: C++黑马讲义

评论区

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