21xrx.com
2024-12-22 20:51:33 Sunday
登录
文章检索 我的文章 写文章
C++多线程编程实例:掌握多线程技术的应用!
2023-07-07 14:52:50 深夜i     --     --
C++ 多线程编程 实例 掌握 应用

在当今的软件开发领域中,多线程编程已经变得越来越普遍,由此可以提高程序的效率和响应速度。对于C++编程而言,多线程编程技术也是非常必要的。下面将具体介绍C++多线程编程的应用方法和实例。

1. 创建线程

使用C++编程语言实现多线程的方法,可以使用C++语言提供的thread库。在thread库中,可以通过使用thread类的构造函数来完成线程的创建。

例如,在以下C++代码的线程函数中,将输出一条消息:

void ThreadFunc() I am a thread” << std::endl; 

实现创建线程的代码如下所示:

#include

int main() { 

 // 创建线程对象 

 std::thread t(ThreadFunc); 

 // 等待线程执行完毕 

 t.join(); 

 return 0; 

以上代码表示创建一个新的线程对象并启动线程,将执行线程函数ThreadFunc()。调用t.join()等待线程执行完毕,程序随后将会继续向后执行。

2. 使用互斥锁

在多线程环境下,线程之间的并发执行时会带来数据竞争问题。为了避免数据竞争,必须使用互斥锁实现线程的互斥访问。

以下是一个使用互斥锁实现多线程计数的实例。

#include

#include

#include

std::mutex mtx; 

int count = 0; 

void ThreadFunc() { 

 for (int i = 0; i < 100000; i++) { 

  mtx.lock(); 

  count++; 

  mtx.unlock(); 

 } 

int main() { 

 std::thread t1(ThreadFunc); 

 std::thread t2(ThreadFunc); 

 t1.join(); 

 t2.join(); 

 printf("count=%d\n", count); 

 return 0; 

以上代码中,定义了一个互斥锁对象mtx,count变量代表计数器,在两个线程中循环递增该计数器。为了避免两个线程同时访问count变量,使用互斥锁对象的lock()和unlock()函数实现了线程的互斥访问。

3. 使用 condition variable

与互斥锁timer类似,使用条件变量(condition variable)可以实现线程间的通信。下面是一个使用条件变量实现两个线程之间消息的传递。

#include

#include

#include

#include

std::mutex mtx; 

std::condition_variable cond; 

bool flag = false; 

void Consumer() { 

 std::unique_lock lock(mtx); 

 while (!flag) { 

  cond.wait(lock); 

 } 

 std::cout << "Consumer get value." << std::endl; 

void Producer() { 

 std::unique_lock lock(mtx); 

 flag = true; 

 cond.notify_one(); 

int main() { 

 std::thread t1(Consumer); 

 std::thread t2(Producer); 

 t1.join(); 

 t2.join(); 

 return 0; 

以上代码定义了一个互斥锁mutex对象mtx、一个条件变量condition_variable对象cond、以及一个bool型flag变量。在线程1中,使用while轮询等待flag变为true,使用条件变量cond.wait()实现线程等待。在线程2中,改变flag变量的值并通知线程1线程2中改变flag变量的值,通知线程1结束等待并执行代码;

以上是3个使用C++编程语言实现多线程技术的实例,要想掌握多线程技术的应用,还需要不断深入学习、练习!

  
  

评论区

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