![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程编程
文章平均质量分 80
huangjh2018
这个作者很懒,什么都没留下…
展开
-
Linux多线程编程(三)——线程特定数据
在这一篇章中我们主要来讲讲线程特定数据。线程特定数据,也称为线程私有数据,是存储和查询某个特定线程相关数据的一种机制。引入这个机制的原因是:有时候我们希望每个线程可以访问它自己单独的数据副本,而不需要担心与其他线程的同步访问问题。我们知道一个进程中的所有线程都可以访问这个进程的整个地址空间。除了使用寄存器以外,一个线程没有办法阻止另一个线程访问它的数据。线程特定数据也不例外。虽然底层的实现部分并不能阻止这种访问能力,但管理线程特定数据的函数可以提高线程间的数据独立性,使得线程不太容易访问到其他线程的线程原创 2017-05-08 20:34:27 · 397 阅读 · 0 评论 -
Linux多线程编程(二)——线程属性
pthread接口允许我们通过设置每个对象关联的不同属性来细调线程的行为。在上一篇中我们调研pthread_create函数的实例中,传入的参数都是空指针,而不是指向pthread_attr_t结构的指针。可以使用pthread_attr_t结构修改线程默认 属性,并把这些属性和创建的线程联系起来。可以使用pthread_attr_init函数初始化pthread_attr_t。在调用pthread_attr_init以后,pthread_attr_t结构所包含的就是操作系统实现支持的所有线程属性的默认值原创 2017-04-23 11:01:07 · 308 阅读 · 0 评论 -
Linux多线程编程(一)——线程创建
1.1线程的概念线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另原创 2017-04-19 21:58:47 · 404 阅读 · 0 评论 -
程序随笔——C++实现的一个线程池
1.线程池简介线程池是一种多线程处理形式,处理过程中我们将相应的任务提交给线程池,线程池会分配对应的工作线程执行任务或存放在任务队列中,等待执行。我们知道在面向对象编程中,创建和销毁对象是需要消耗一定时间的,因为创建一个对象要获取内存资源或者其它更多资源。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个原创 2017-06-10 17:02:13 · 594 阅读 · 0 评论 -
GCC关键字__thread
最近,在一些代码中发现了个很有意思的关键字——__thread。在多线程编程中,这个关键字算是很有作用的。虽然很有用,不过该关键字是GCC编译器提供的,因此如果考虑到跨平台的情况下,就需要谨慎考虑了。关于__thread关键字,我们需要作一些说明:__thread是GCC内置的线程局部存储设施,其存储效率可以和全局变量相比;__thread变量在每一个线程中都有一份独立实例,各线程值是互不干扰的。同时__thread关键字的使用也有自身的限制:只能修饰POD类型(类似整型指针的标量,不带自定义的构原创 2017-07-08 15:08:59 · 2198 阅读 · 0 评论 -
Linux线程同步之——互斥量(Mutex)
当我们在进行多线程编程的时候,如果有多个线程共享相同的内存时,我们需要确保每个线程看到一致的数据视图。如果每个线程使用的变量都是其他线程不会读取和修改的,或对每个线程是只读的,那么久不存在一致性的问题。但是,当一个线程可以修改变量,其他线程同样也能读取或修改变量的时候,我们就需要对这些线程进行同步。在Linux上进行多线程编程时,我们常用到互斥量(Mutex)。 互斥量(Mutex)从本质上说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放锁。当我们对互斥量进行加锁之后,任何其他试图再次对互原创 2017-03-07 19:22:20 · 4836 阅读 · 1 评论 -
GCC提供的加减和逻辑原子操作
在实际的编程中,我们不免需要对变量进行加减和逻辑操作。由于对变量的加减和逻辑操作并不是原子操作,在单线程编程中这并不会有什么的影响;在多线程编程中这就会造成问题。在多线程编程中,如果需要对同一变量进行访问。那么我们最先想到的可能是利用线程的同步机制(比如互斥量)制造出一片线程安全的区域,并在这片区域对变量进行访问。这似乎“合情合理”,确实这种做法是正确的,它的确能确保对变量访问的线程安全,但某些情况下,这种处理方式效率是低下的。gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供原创 2017-04-03 17:47:01 · 1978 阅读 · 0 评论