摘要: 1、半同步半异步线程池 在处理大量并发任务的时候,如果一个请求一个线程来处理任务,大量的线程创建将会消耗过多的资源,还增加了线程上下文切换的开销,而通过线程池技术可以很好的解决这个问题。 线程池技术通过在系统中预先创建一些线程,当任务请求来到的时候,从线程池中分配一个预先创建的线程来处理任务,在任务 阅读全文
posted @ 2017-12-03 19:44 Memset 阅读(1158) 评论(0) 推荐(0) 编辑
摘要: 1、异步操作 C++11提供了异步操作相关的类,std::future、std::promise和std::package_task。std::future作为异步结果的传输通道,方便的获取线程函数的返回值;std::promise用来包装一个值,将数据和future绑定起来,方便线程赋值;std: 阅读全文
posted @ 2017-12-03 19:36 Memset 阅读(1885) 评论(0) 推荐(0) 编辑
摘要: 1、原子变量 C++11提供了原子类型std::atomic<T>,可以使用任意类型作为模板参数,使用原子变量就不需要使用互斥量来保护该变量,用起来更加简洁。 举个例子,如果要做一个计数器,使用mutex时和使用原子变量依次如下: 2、call_once/once_flag 单调函数就是在多线程环境 阅读全文
posted @ 2017-12-03 19:30 Memset 阅读(1106) 评论(0) 推荐(0) 编辑
摘要: 1、简介 C11提供另外一种用于等待的同步机制,它可以阻塞一个或者多个线程,直到收到另外一个线程发出的通知或者超时,才会唤醒当前阻塞的线程。条件变量要和互斥量配合起来使用。 condition_variable,配合std::unique_lock<std::mutex>进行wait操作。 cond 阅读全文
posted @ 2017-12-03 19:28 Memset 阅读(1765) 评论(0) 推荐(0) 编辑
摘要: 1、概述 锁类型 c11提供了跨平台的线程同步手段,用来保护多线程同时访问的共享数据。 std::mutex,最基本的 Mutex 类,独占的互斥量,不能递归使用。 std::time_mutex,带超时的独占互斥量,不能递归使用。 std::recursive_mutex,递归互斥量,不带超时功能 阅读全文
posted @ 2017-12-03 18:50 Memset 阅读(2736) 评论(0) 推荐(0) 编辑
摘要: 1、线程的创建 C11创建线程非常简单,只需要提供线程函数就行,标准库提供线程库,并可以指定线程函数的参数。 2、阻塞&非阻塞 在线程执行的时候,可以选择线程是否阻塞执行,如果阻塞,则主线程等线程函数执行完,再往下执行,否则启动线程之后,主线程直接往下执行。 join函数会阻塞线程,直到线程函数执行 阅读全文
posted @ 2017-12-03 18:44 Memset 阅读(2203) 评论(0) 推荐(0) 编辑