21xrx.com
2024-12-22 16:07:30 Sunday
登录
文章检索 我的文章 写文章
标题:C++线程调用实例详解
2023-06-24 09:55:57 深夜i     --     --
C++ 线程调用 实例 线程同步 多线程编程

C++线程调用实例详解

在多线程编程中,线程是最常用的并发编程模型之一。线程能够让一个程序同时执行多个任务,也能够让一个程序在执行一个任务的同时执行其他任务。C++ 语言也提供了一组丰富的线程库,使得线程编程变得更加简单和灵活。

在 C++ 中,线程库函数主要由 C++11 标准库提供,其中最为基础的是 头文件。通过这个头文件,可以实现线程的创建、销毁、等待等操作。下面将详细介绍 C++ 中线程调用实例。

1. 创建线程

在 C++ 中,使用 std::thread 类来创建线程。下面是一个简单的线程创建示例:


#include <iostream>

#include <thread>

void foo()

{

  std::cout << "Hello, C++ !" << std::endl;

}

int main()

{

  std::thread th(foo);

  th.join();

  return 0;

}

上面的代码,创建了一个名为 th 的线程,并将指向函数 foo 的指针作为参数传入。std::thread 构造函数会返回一个线程对象,这里的 th 就是这样一个线程对象。调用 join() 函数可以等待线程执行完成,并释放线程资源。

2. 带参数的线程

有时候,我们可能需要在新线程中执行带有参数的函数。这时,需要将参数传递给线程的启动函数。下面是一个示例代码:


#include <iostream>

#include <thread>

void foo(int n)

  std::cout << "The number is: " << n << std::endl;

int main()

{

  int n = 100;

  std::thread th(foo, n);

  th.join();

  return 0;

}

上述代码中,创建了一个名为 th 的线程,并将指向函数 foo 的指针以及变量 n 的值作为参数传递给线程。函数 foo 将输出一个带参数的字符串,最终退出线程。

3. 线程睡眠

有时候我们需要让线程等待一段时间,然后再继续执行。C++ 中提供了 std::this_thread::sleep_for 函数来实现线程睡眠功能。下面是一个简单的示例代码:


#include <iostream>

#include <thread>

#include <chrono>

void foo()

{

  std::this_thread::sleep_for(std::chrono::seconds(2));

  std::cout << "2 seconds has passed!" << std::endl;

}

int main()

{

  std::thread th(foo);

  th.join();

  return 0;

}

在 foo() 函数中调用 std::this_thread::sleep_for 函数,参数是一个 std::chrono::duration 类型,表示等待的时间长度。上述代码中,线程 th 将会等待 2 秒,然后输出一条消息。

4. 线程的共享变量

在多线程编程中,变量的访问可能存在线程安全问题。C++ 中提供了 std::atomic 类型,它是一种特殊的类型,可以保证它的成员变量在多线程中的同步访问。下面是一个简单的示例代码:


#include <iostream>

#include <thread>

#include <atomic>

std::atomic<int> cnt{0};

void foo()

{

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

  {

    cnt++;

  }

}

int main()

{

  std::thread th1(foo), th2(foo);

  th1.join();

  th2.join();

  std::cout << "cnt = " << cnt << std::endl;

  return 0;

}

上述代码中,定义了一个名为 cnt 的 std::atomic 类型变量,用于线程间的共享使用。在 foo() 函数中,每个线程会执行 5 次自增操作,这样就会对 cnt 变量进行了一定次数的自增操作。最终输出 cnt 的值。这里的输出结果应该是 10。

总结

C++ 线程库提供了一组丰富的线程函数,可以让程序员很方便地实现多线程并发编程。本文介绍了 C++ 中线程创建、睡眠、参数使用以及共享变量等问题的实现方法,希望对读者有所帮助。当然,多线程编程也存在许多困难和技巧,需要程序员在实践中逐步积累经验。

  
  

评论区

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