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++ 线程间通信方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu20.04 electron
- 下一篇: c++并发编程之原子操作的实现原理