21xrx.com
2024-09-20 06:07:25 Friday
登录
文章检索 我的文章 写文章
C++ 线程间通信技巧大全
2023-07-12 10:44:10 深夜i     --     --
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++线程间通信技巧,你将能够更好地管理不同线程间的数据交互和协调工作。同时,这些技巧能够帮助你提高程序的性能和稳定性,使程序更加高效。

  
  

评论区

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