首頁>Club>
5
回覆列表
  • 1 # 張羽赫

    一:兩個程序間的兩個執行緒通訊,相當於程序間通訊

    二:一個程序中的兩個執行緒間通訊

      通訊方式:

    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

  • 中秋節和大豐收的關聯?
  • 漢蘭達2019款報價多少錢?