zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    游戏方案
    团队介绍
    【面向对象程序设计】作业四
    FIFO与LRU实现(Java)
    spring事务介绍
    微信抢红包算法
    Hibernate Dao映射配置通用接口类反射获取加载calass实例
    股票两次买卖最大收益(java)
    Eclipse安装JD-Eclipse反编译插件看源码
    Java GC调优
  • 原文地址:https://www.cnblogs.com/jobs1/p/10784021.html
Copyright © 2011-2022 走看看