21xrx.com
2024-12-22 20:55:13 Sunday
登录
文章检索 我的文章 写文章
C++多线程实例:实现并发编程的案例
2023-07-10 03:33:36 深夜i     --     --
C++ 多线程 并发编程 实例 案例

并发编程是现代计算机领域中的热门话题,它可以使得计算机程序在多个处理器上同时执行,极大地提高程序的执行效率和响应速度。C++是一种广泛使用的编程语言,其支持多线程编程,能够轻松实现并发编程。本文将介绍使用C++多线程实例来实现并发编程的案例。

C++多线程的基本概念

多线程是指在单个程序中同时执行多个线程的能力,每个线程都对应一个独立的执行流。C++中的多线程是通过线程库实现的,最常用的线程库是C++11标准库,其中包括了标准的线程头文件-

在C++中创建线程的最简单方式是创建一个函数,在该函数中定义要执行的操作,并将其作为参数传递给线程构造函数。下面是一个简单的C++多线程实例:

#include

#include

void threadFunction()

  std::cout << "Hello from thread!" << std::endl;

int main()

{

  std::thread t(threadFunction);

  t.join();

  return 0;

}

上述程序中,我们首先定义了一个线程函数threadFunction(),然后在main()函数中创建了一个线程对象t,并将threadFunction()函数作为参数传递给了t的构造函数。最后调用join()函数等待线程执行完成。执行上述程序,会在控制台输出“Hello from thread!”。

使用互斥锁实现并发编程

在并发编程中,为了保证多个线程对共享资源的访问安全,需要使用互斥锁。

互斥锁保证同一时间只有一个线程能够访问共享资源。C++提供了一个标准互斥锁类std::mutex。

下面是一个使用互斥锁实现并发编程的C++多线程实例:

#include

#include

#include

std::mutex mtx;

void threadFunction()

{

  mtx.lock();

  std::cout << "Hello from thread!" << std::endl;

  mtx.unlock();

}

int main()

{

  std::thread t1(threadFunction);

  std::thread t2(threadFunction);

  t1.join();

  t2.join();

  return 0;

}

上述程序中,我们定义了一个互斥锁对象mtx,在threadFunction()中对mtx进行了加锁和解锁,保证了对共享资源的访问安全。然后在main()函数中创建了两个线程t1和t2,它们同时访问了共享资源。

使用条件变量实现并发编程

除了互斥锁外,C++提供了条件变量用于线程调度和同步。条件变量是一种用于在线程之间同步访问共享数据的同步工具,它通常与互斥量搭配使用。

下面是一个使用条件变量实现并发编程的C++多线程实例:

#include

#include

#include

#include

std::mutex mtx;

std::condition_variable cv;

bool ready = false;

void threadFunction()

{

  std::unique_lock lock(mtx);

  while (!ready)

  {

    cv.wait(lock);

  }

  std::cout << "Hello from thread!" << std::endl;

}

int main()

{

  std::thread t(threadFunction);

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

  {

    std::lock_guard lock(mtx);

    ready = true;

  }

  cv.notify_one();

  t.join();

  return 0;

}

上述程序使用了条件变量实现了线程同步,在threadFunction()函数中,我们定义了一个std::unique_lock类对象lock,并在while循环中调用cv.wait()函数阻塞线程。在main()函数中,我们在一个锁定块内将ready设置为true,并通过调用cv.notify_one()函数通知正在等待的线程。最后等待线程执行完成。

总结

本文介绍了C++多线程实例,包括基本概念和使用互斥锁和条件变量实现并发编程的案例。这些多线程实例可以加深我们对并发编程的理解,提高我们的编程水平和效率。

  
  

评论区

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