21xrx.com
2025-03-30 17:59:19 Sunday
文章检索 我的文章 写文章
C++ 线程间通信技巧大全
2023-07-12 10:44:10 深夜i     21     0
C++ 线程间通信 技巧 大全

在C++编程中,线程通信是必不可少的一部分,它允许不同的线程之间进行数据交互和协调工作。在本文中,我们将介绍一些常见的C++线程间通信技巧,让你更好地掌握这一领域。

1. Mutex

Mutex(互斥量)是一种同步机制,用于控制多个线程访问共享资源的竞争关系。使用Mutex时,线程会被阻塞,直到它得到了Mutex的所有权。在C++中,可以使用std::mutex类来实现Mutex。

示例代码:

#include <iostream>
#include <mutex>
std::mutex m;
void foo()
{
  std::lock_guard<std::mutex> lock(m);
  // 执行一些需要访问共享资源的操作
}
int main()
{
  std::thread t(foo);
  t.join();
}

2. Semaphore

Semaphore(信号量)是一种计数器,用于控制多个线程对共享资源的访问。在C++中,可以使用std::semaphore类来实现Semaphore。

示例代码:

#include <iostream>
#include <semaphore>
std::semaphore s;
void foo()
{
  s.acquire();
  // 执行一些需要访问共享资源的操作
  s.release();
}
int main()
{
  s.release(); // 初始化信号量的计数器
  std::thread t(foo);
  t.join();
}

3. Condition Variable

Condition Variable(条件变量)用于在多个线程之间阻塞和唤醒执行。在C++中,可以使用std::condition_variable类来实现Condition Variable。

示例代码:

#include <iostream>
#include <mutex>
#include <condition_variable>
std::mutex m;
std::condition_variable cv;
bool ready = false;
void foo()
{
  std::unique_lock<std::mutex> lock(m);
  cv.wait(lock, []() return ready; );
  // 执行一些需要访问共享资源的操作
}
int main()
{
  ready = true;
  cv.notify_one();
  std::thread t(foo);
  t.join();
}

4. Futures

Futures(未来对象)允许一个线程等待另一个线程的返回值。在C++中,可以使用std::future类来实现Futures。

示例代码:

#include <iostream>
#include <future>
int foo()
  // 执行一些计算并返回结果
  return result;
int main()
{
  std::future<int> f = std::async(foo);
  // 在这里可以执行一些其他的操作
  int result = f.get();
  // 使用 result 进行操作
}

通过掌握上述几种常用的C++线程间通信技巧,你将能够更好地管理不同线程间的数据交互和协调工作。同时,这些技巧能够帮助你提高程序的性能和稳定性,使程序更加高效。

  
  

评论区

请求出错了