c++并发编程
文章平均质量分 87
vector6_
linux c++/java
展开
-
整型变量的原子操作
整型变量的原子操作为什么整型变量赋值操作不是原子的常见的整型变量操作有如下几种情况:给整型变量赋值一个确定的值,如int a = 1;这条指令操作一般是原子的,因为对应着一条计算机指令,CPU 将立即数 1 搬运到变量 a 的内存地址中即可,汇编指令如下:mov dword ptr [a], 2然而这确是最不常见的情形,由于现代编译器一般存在优化策略,如果变量 a 的值在编译期间就可以计算出来(例如这里的例子中 a 的值就是1),那么 a 这个变量本身在正式版本的软件中(release原创 2021-06-14 08:11:58 · 656 阅读 · 1 评论 -
线程局部存储: gcc __thread与c++11 thread_local 关键字
线程局部存储 :Thread Local Storage线程局部存储(tls)是一种机制,通过这一机制分配的变量,每个当前线程有一个该变量的实例.gcc __thread关键字gcc用于实现tls的运行时模型最初来自于IA-64处理器的ABI,但以后被用到其它处理器上。它需要链接器(ld),动态连接器(ld.so)和系统库(libc.so,libpthread.so)的全力支持.因此它不是到处可用的。在用户层,用一个新的存储类型关键字:__thread表示这一扩展。例如:__thread int原创 2021-06-05 13:25:12 · 2113 阅读 · 5 评论 -
ctor/dtor 与线程安全
ctor/dtor 与线程安全当一个对象能被多个线程同时看到,那么对象的销毁时机就会变得模糊不清,可能出现多种竞态条件:在即将析构一个对象时,从何而知是否有另外的线程正在执行该对象的成员函数?如何保证在执行成员函数期间,对象不会在另一个线程被析构?在调用某个对象的成员函数之前,如何得知这个对象还活着?现在以 shared_ptr 一劳永逸地解决这些问题线程安全的定义依据《Java 并发编程实践》/《Java Concurrency in 原创 2021-06-03 23:31:23 · 983 阅读 · 0 评论 -
Linux 上的线程标识
Linux 上的线程标识进程PID、线程PID、线程TID进程PID:进程开启之后,在系统中是唯一的,不可重复的线程TID:创建一个线程之后,线程有一个标识符,此标识符只在该线程所属的进程上下文才有意义,为pthread_t数据类型。在不同的进程中,可能会出现相同的情况线程PID:Linux中的POSIX线程库实现的线程其实也是一个进程(LWP),只是该进程与主进程(启动线程的进程)共享一些资源而已,比如代码段,数据段等。在系统中是唯一的,不可重复的PS : 主线程PID等于线程所在的进程的PID原创 2021-06-03 23:29:51 · 458 阅读 · 0 评论 -
线程资源同步——互斥量和条件变量
Linux 线程资源同步对象——互斥量和条件变量Linux 互斥体Linux 互斥体的用法和 Windows 的临界区对象用法很相似,一般也是通过限制多个线程同时执行某段代码来达到保护资源的目的。和接下来要介绍的信号量、条件变量一样,Linux 互斥体都实现在 NPTL (Native POSIX Thread Library)。在 NPTL 中我们使用数据结构 pthread_mutex_t 来表示一个互斥体对象(定义于 pthread.h 头文件中)。互斥体对象我们可以使用两种方式来初始化:使用原创 2021-06-03 23:28:05 · 228 阅读 · 0 评论 -
线程的创建与结束
线程的创建与结束我们知道不管是哪个库还是哪种高级语言(如Java),线程的创建最终还是调用操作系统的 API 来进行的。本文主要对操作系统的接口进行介绍。Linux线程创建Linux平台上使用 pthread_create 这个 API 来创建线程,其函数签名如下:int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_原创 2021-06-03 23:21:13 · 338 阅读 · 0 评论