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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM