一:兩個程序間的兩個執行緒通訊,相當於程序間通訊
二:一個程序中的兩個執行緒間通訊
通訊方式:
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();
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
一:兩個程序間的兩個執行緒通訊,相當於程序間通訊
二:一個程序中的兩個執行緒間通訊
通訊方式:
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