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;
	}
}

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值