C++信號量condition_variable

目錄

1、condition_variable

2、函數

3、測試


1、condition_variable

同步線程間的數據流依賴關係。

2、函數

Condition_variable cv;          構造
Cv.~Condition_variable();       銷燬
Cv.notify_one();                喚醒一個等待者
Cv.notify_all();                喚醒所有的等待者
Cv.wait(ul);                    使用unique_lock ul來等待通知
Cv.wait(ul,pred);               使用unique_lock ul來等待通知,並直到pred在一次屬性之後結果爲true
Cv.wait_for(ul,duration);       使用unique_lock ul來等待通知,等待期限是duration
Cv.wait_for(ul,duration,pred); 使用unique_lock ul來等待通知,等待期限是duration或直到pred在一次甦醒之後結果爲true
Cv.wait_until(ul,timepoint);    直到時間點
Cv.wait_until(ul,timepoint,pred);使用unique_lock ul來等待通知,直到時間點或直到pred在一次甦醒之後結果爲true
Cv.native_handle();             返回一個因平臺而異的類型native_handle_type,爲的是不具有可移植性的擴展
Notify_all_at_thread_exit(cv,ul);在調用所在線程喚醒所有使用unique_lock ul來等待cv的線程

3、測試

#include <condition_variable>
#include <mutex>
#include <future>
#include <iostream>

using namespace std;

bool readyFlag;
mutex readyMutex;
condition_variable readyCondVar;

void threadOne()
{
	cout << "ThreadOne " << endl;
	cin.get();

	{
		lock_guard<mutex> lg(readyMutex);
		readyFlag = true;
	}
	//readyCondVar.notify_one();	//發出一個信號
	readyCondVar.notify_all();	//響應所有的等待信號
}

void threadTwo()
{
	{
		unique_lock<mutex> ul(readyMutex);
		readyCondVar.wait(ul, [] {return readyFlag; });
	}

	cout << "threadTwo" << endl;
}

void threadThree()
{
	{
		unique_lock<mutex> ul(readyMutex);
		readyCondVar.wait(ul, [] {return readyFlag; });
	}

	cout << "threadThree" << endl;
}
int main()
{
	auto f1 = async(launch::async, threadOne);
	auto f2 = async(launch::async, threadTwo);
	auto f3 = async(launch::async, threadThree);
	system("pause");
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章