21xrx.com
2024-09-19 09:05:00 Thursday
登录
文章检索 我的文章 写文章
C++多线程函数简介
2023-07-07 01:49:44 深夜i     --     --
C++ 多线程 函数 简介

随着计算机技术的不断发展,多线程编程成为了C++编程领域的重要分支之一,这主要是由于多线程编程可以实现并发执行,提高了程序的效率和性能。C++中的多线程编程分为两种方式:使用操作系统提供的线程库和使用标准C++线程库。本文将着重介绍C++中常用多线程函数的功能和用法。

1. std::thread:std::thread是标准C++中的线程库,它是一个可重入的类,表示一个可执行的线程任务。创建线程可以使用std::thread的构造函数,将需要执行的任务作为参数传递给它。例如,以下代码在一个新的线程中打印一个“Hello, World”消息:


#include <thread>

#include <iostream>

void hello()

  std::cout << "Hello

int main() {

  std::thread t(hello);

  t.join(); // 等待线程结束

  return 0;

}

2. std::mutex:std::mutex是一个互斥锁,它用于保护共享资源免受同时访问的影响。锁通常用于线程间的同步操作。在一个线程中获取锁,其他线程的尝试获取锁会被阻塞,直到持有锁的线程释放锁。例如,以下代码演示了如何在两个线程中使用std::mutex来保护一个共享资源:


#include <thread>

#include <mutex>

#include <iostream>

std::mutex mtx;

int num = 0;

void increase_num()

{

  mtx.lock();

  ++num;

  mtx.unlock();

}

int main()

{

  std::thread t1(increase_num);

  std::thread t2(increase_num);

  t1.join();

  t2.join();

  std::cout << num << std::endl;

  return 0;

}

3. std::condition_variable:std::condition_variable是一个条件变量,它被用于在多个线程之间进行通信。条件变量可以与互斥锁一起使用来实现线程安全的等待和通知操作。例如,以下代码演示了如何使用std::condition_variable来线程间通信:


#include <iostream>

#include <thread>

#include <mutex>

#include <condition_variable>

std::mutex mtx;

std::condition_variable cv;

bool data_ready = false;

void worker_thread() {

  // 等待数据准备好

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

  while (!data_ready)

    cv.wait(lck);

  // 处理数据

  std::cout << "Data received!" << std::endl;

}

int main() {

  std::thread t(worker_thread);

  // 做一些数据处理

  std::this_thread::sleep_for(std::chrono::milliseconds(1000));

  std::cout << "Data is ready!" << std::endl;

  // 发送通知

  {

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

    data_ready = true;

  }

  cv.notify_one();

  // 等待线程结束

  t.join();

  return 0;

}

4. std::atomic:std::atomic是一个原子类型,它提供了线程安全的访问,并保证操作的原子性。因为它们是线程安全的,所以多个线程可以同时访问同一个原子对象。例如,以下代码演示了使用std::atomic来保护共享数据:


#include <iostream>

#include <thread>

#include <atomic>

std::atomic<int> num(0);

void increase_num() {

  ++num;

}

int main() {

  std::thread t1(increase_num);

  std::thread t2(increase_num);

  t1.join();

  t2.join();

  std::cout << num << std::endl;

  return 0;

}

总之,C++中有许多可以用于多线程编程的函数,例如std::thread、std::mutex、std::condition_variable和std::atomic等等。掌握这些函数的用法可以帮助程序员更加高效地实现多线程编程。

  
  

评论区

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