C11线程管理:原子变量&单调函数】的更多相关文章

1.原子变量 C++11提供了原子类型std::atomic<T>,可以使用任意类型作为模板参数,使用原子变量就不需要使用互斥量来保护该变量,用起来更加简洁. 举个例子,如果要做一个计数器,使用mutex时和使用原子变量依次如下: //使用mutex struct Counter { int value; std::mutex mutex; void increment() { std::lock_guard<std::mutex> lock(mutex); ++value; }…
1.简介 C11提供另外一种用于等待的同步机制,它可以阻塞一个或者多个线程,直到收到另外一个线程发出的通知或者超时,才会唤醒当前阻塞的线程.条件变量要和互斥量配合起来使用. condition_variable,配合std::unique_lock<std::mutex>进行wait操作. condition_variable_any,和任意带有lock.unlock语意 的mutex搭配使用,比较灵活,但是效率比condition_variable低. 条件变量的使用过程如下: a.拥有条件…
1.异步操作 C++11提供了异步操作相关的类,std::future.std::promise和std::package_task.std::future作为异步结果的传输通道,方便的获取线程函数的返回值:std::promise用来包装一个值,将数据和future绑定起来,方便线程赋值:std::pack_age用来包装一个可调用对象,将函数和future绑定起来,以便异步调用. 1.1 std::future c11中的线程使我们创建和使用线程非常方便,但是当我们想要得到线程函数的执行结果…
1.线程的创建 C11创建线程非常简单,只需要提供线程函数就行,标准库提供线程库,并可以指定线程函数的参数. #include <iostream> #include <thread> void vFunc(int i, int j) { std::cout << i << " " << j << std::endl; } int main() { std::thread t(vFunc, , ); t.join(…
1.概述 锁类型 c11提供了跨平台的线程同步手段,用来保护多线程同时访问的共享数据. std::mutex,最基本的 Mutex 类,独占的互斥量,不能递归使用. std::time_mutex,带超时的独占互斥量,不能递归使用. std::recursive_mutex,递归互斥量,不带超时功能. std::recursive_timed_mutex,带超时的递归互斥量. lock类型 std::lock_guard,与 Mutex RAII 相关,方便线程对互斥量上锁. std::uniq…
java线程管理 参见: http://harmony.apache.org/subcomponents/drlvm/TM.html 1. 修订历史 2. 关于本文档 2.1. 目的 2.2. 面向的读者 2.3. 文档约定 2.4. 文档使用 3. 概览 3.1. 主要特点 3.2. VM中的线程管理器 3.3. 可移植性 4. 体系结构 4.1. 对外接口 4.1.1. Native 接口 4.1.2. Java* 接口 4.2. 数据结构 4.3. 线程控制结构 4.3.1.Native…
一.条件变量 条件变量实现了java.util.concurrent.locks.Condition接口,条件变量的实例化就是通过一个Lock对象上调用newCondition()方法获得的,这样条件就和一个锁绑定起来了.因此,Java中的条件变量只能和锁配合使用,来控制并发程序访问竞争资源的安全. 条件变量的出现是为了更精细的控制线程等待与唤醒,一个锁可以有多个条件,每个条件上有多个线程等待,通过await()方法,可以让线程在该条件下等待.当调用signalAll()方法时,又可以唤醒该条件…
原子变量:jdk1.5 后 java.util.concurrent.atomic 包下提供了常用的原子变量: - AtomicBoolean - AtomicInteger - AtomicLong - AtomicReference - AtomicIntegerArray - AtomicLongArray - AtomicMarkableReference - AtomicReferenceArray - AtomicStampedReference 1.以上类中的变量都是volatil…
原子变量和非阻塞的同步机制 一.锁的劣势 1.在多线程下:锁的挂起和恢复等过程存在着很大的开销(及时现代的jvm会判断何时使用挂起,何时自旋等待) 2.volatile:轻量级别的同步机制,但是不能用于构建原子复合操作 因此:需要有一种方式,在管理线程之间的竞争时有一种粒度更细的方式,类似与volatile的机制,同时还要支持原子更新操作 二.CAS 独占锁是一种悲观的技术--它假设最坏的情况,所以每个线程是独占的 而CAS比较并交换:compareAndSwap/Set(A,B):我们认为内存…
CAS算法 CAS(compare-and-swap)是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令,用于管理对共享数据的并发访问. CAS是一种无锁非阻塞算法的实现. CAS 包含了 3 个操作数: 需要读写的内存值V 进行比较的值A 拟写入的新值B 当且仅当V的值等于A时,CAS通过原子方式用新值更新V的值,否则不会执行任何操作. CAS操作过程如下所示 CAS算法模拟 /** * 模拟CAS算法 * * Created by 吴海飞 on 2017-1-22. */…