21xrx.com
2024-06-03 05:27:35 Monday
登录
文章检索 我的文章 写文章
C++11线程的使用方法
2023-07-04 09:42:24 深夜i     --     --
C++11 线程 使用方法

C++11是C++的一个更新版本,增加了许多新功能和语法,其中之一就是多线程。多线程是指一个进程中的多个线程同时执行,它可以提高程序的性能,提高响应速度和吞吐量。C++11中引入了一个新的头文件 ,提供了线程的相关类和方法。

线程的创建

线程的创建可以通过类std::thread来实现,它是一个可调用对象,可以传入一个函数和参数。下面是一个简单的例子:


#include <iostream>

#include <thread>

void func(int num)

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

int main() {

  std::thread t(func, 10);

  t.join();

  return 0;

}

这段代码创建了一个线程t,将func函数和参数10传入线程t中,并且调用线程的join函数等待线程t执行完毕。

线程的销毁

线程的销毁可以通过join或detach方法来实现。join方法会等待线程执行完毕后再销毁,而detach不会等待线程执行完毕就可以销毁。


std::thread t(func, 10);

t.join(); // 等待线程执行完毕

// 或

t.detach(); // 线程和主线程并行执行

线程的同步

多线程中的同步是通过锁来实现的,C++11中引入了一个新的头文件 ,提供了互斥锁(mutex)和条件变量(condition_variable)。互斥锁可以保证同一时间只有一个线程访问共享资源,条件变量可以在线程之间进行通讯。

下面是一个简单的例子,展示了两个线程间的同步:


#include <iostream>

#include <thread>

#include <mutex>

std::mutex mtx; // 声明互斥锁

void func(int num) {

  mtx.lock(); // 等待互斥锁

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

  mtx.unlock(); // 释放互斥锁

}

int main() {

  std::thread t1(func, 10);

  std::thread t2(func, 20);

  t1.join();

  t2.join();

  return 0;

}

这段代码创建了两个线程t1和t2,都会调用func函数。由于func函数中有共享资源std::cout,所以需要使用互斥锁来保护。在每个线程中,通过调用lock方法获取互斥锁并保护共享资源,之后通过unlock方法释放互斥锁。

总结

C++11中引入了线程支持,可以方便地进行多线程编程,提高程序的性能。线程的创建可以通过std::thread来实现,销毁可以通过join和detach方法来实现。线程的同步可以通过互斥锁和条件变量来实现。多线程编程需要注意同步问题,以保证程序的正确性。

  
  

评论区

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