c++11之多線程

 

 

 

c++11之thread

包含頭文件:#include <thread> 

 

c++11之chrono

包含頭文件:#include <chrono> 

chrono是一個日期時間相關的庫,比較常用的就是處理thread的睡眠時間

我們知道,在Linux系統裏面,線程延時都是使用sleep(x)來進行延時的,而c++11的thread延時則是如下:

std::this_thread::sleep_for(std::chrono::milliseconds(100));

其中,std::chrono::milliseconds(100) 則是用來獲取1個100ms的延時週期。

 

 

 

c++11之互斥量

  • std::mutex  &  std::lock_guard  &  std::unique_lock
  • std::timed_mutex
  • std::recursive_mutex
  • std::recursive_timed_mutex

unique_lock 具有 lock_guard 的所有功能。

 

 

c++11之信號量

       信號量(semphore)是線程同步時經常使用的一個很重要的應用,But ,c++11的多線程裏面並沒有引進信號量(semphore)。
而是以 mutex 和 condition_variable 組合使用的。

下面是一段 std::unique_lock 和 condition_variable 組合當做信號量使用的示例:
        task_1 每次必須等待 task_2 釋放掉信號量後才能執行,否則處於阻塞等待狀態

#include <iostream>
#include <thread>
#include <chrono> 
#include <mutex>
#include <condition_variable>

std::mutex my_mutex;         //創建1個互斥量
std::condition_variable cv;  //創建1個條件變量

int task_1();
int task_2();



int main()
{
	std::thread t1(task_1);
	std::thread t2(task_2);

//	t1.join();
//	t2.join();
	t1.detach();
	t2.detach();

	std::cout << "Hello World" << std::endl;

	system("pause");
	return 0;
}

int task_1()
{
	int tickets = 0;

	for (;;)
	{
		std::unique_lock<std::mutex> locker(my_mutex);
		cv.wait(locker);  //相當於等待1個信號量
		
		std::cout << "thread_1:" << tickets++ << std::endl;
		

		//std::this_thread::sleep_for(std::chrono::milliseconds(500));
	}
}

int task_2()
{

	for (;;)
	{
		std::this_thread::sleep_for(std::chrono::seconds(2));
		cv.notify_one();  //相當於 semaphore_release

		std::cout << "接球" << std::endl;
	}
}

 

 

 

 

 

 

 

 

 

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