c++ 线程间通信方式

Posted jobs1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 线程间通信方式相关的知识,希望对你有一定的参考价值。

一:两个进程间的两个线程通信,相当于进程间通信

二:一个进程中的两个线程间通信

  通信方式:

1.互斥锁

  mutex;

  lock_guard (在构造函数里加锁,在析构函数里解锁)

  unique_lock 自动加锁、解锁

 

2.读写锁

  shared_lock

3.信号量

  c++11中未实现,可以自己使用mutex和conditon_variable 实现

  代码实现如下:

    

#pragma once
#include <mutex>
#include <condition_variable>
class Semaphore
{
public:
 explicit Semaphore(unsigned int count); //用无符号数表示信号量资源 
 ~Semaphore();
public:
 void wait();
 void signal();
private:
 int m_count; //计数器必须是有符号数 
 std::mutex m_mutex;
 std::condition_variable m_condition_variable;
};
 
#include "Semaphore.h"
Semaphore::Semaphore(unsigned int count) :m_count(count) {
}
Semaphore::~Semaphore()
{
}
void Semaphore::wait() {
 std::unique_lock<std::mutex> unique_lock(m_mutex);
 --m_count;
 while (m_count < 0) {
  m_condition_variable.wait(unique_lock);
 }
}
void Semaphore::signal() {
 std::lock_guard<std::mutex> lg(m_mutex);
 if (++m_count < 1) {
  m_condition_variable.notify_one();
 }
}

4.条件变量

  condition_variable

以上是关于c++ 线程间通信方式的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程:线程间通信方式

C++线程间的互斥和通信

C++线程间的互斥和通信

进程与线程的区别,进程间通信方式,线程间通信方式

线程间的通信同步方式与进程间通信方式

进程/线程同步的方式和机制,进程间通信