linux多线程
老王不让用
芝兰生于幽谷,不以无人而不芳; 君子修身立德,不为穷困而改节
展开
-
linux多线程:tls的实现方式
在Linux系统中使用C/C++进行多线程编程时,我们遇到最多的就是对同一变量的多线程读写问题,大多情况下遇到这类问题都是通过锁机制来处理,但这对程序的性能带来了很大的影响,当然对于那些系统原生支持原子操作的数据类型来说,我们可以使用原子操作来处理,这能对程序的性能会得到一定的提高。那么对于那些系统不支持原子操作的自定义数据类型,在不使用锁的情况下如何做到线程安全呢?本文将从线程局部存储方面,简单讲解处理这一类线程安全问题的方法。1、数据类型在C/C++程序中常存在全局变量、函数内定义的静态变量以及转载 2020-09-01 18:06:54 · 3687 阅读 · 2 评论 -
再次认识 errno之线程安全
1、errno的由来在C编程中,errno是个不可缺少的变量,特别是在网络编程中。如果你没有用过errno,那只能说明你的程序不够健壮。当然,如果你是WIN32平台的GetLastError(),效果也是一样的。为什么会使用errno呢?个人认为,这是系统库设计中的一个无奈之举,他更多的是个技巧,而不是架构上的需要。我们观察下函数结构,可以发现,函数的参数返回值只有一个,这个返回值一般可以携带错误信息,比如负数表示错误,而正数表述正确的返回值,比如recv函数。但是对于一些返回指针的函数,如:char转载 2020-08-31 19:25:19 · 1725 阅读 · 0 评论 -
多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)
Linux下提供了多种方式来处理线程同步,最常用的是互斥锁(自旋锁)、条件变量、信号量和读写锁。目录1、互斥锁(mutex)2、条件变量(cond)3、 信号量4、 读写锁下面是思维导图:1、互斥锁(mutex) 锁机制是同一时刻只允许一个线程执行一个关键部分的代码。1.1、初始化锁int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutex_attr_t *mutexattr);其中参数 m转载 2020-08-20 15:03:06 · 3616 阅读 · 0 评论 -
linux多线程:设置线程属性之CPU核绑定
不管是线程还是进程,都是通过设置亲和性(affinity)来达到目的。实际应用中通常需要将软件下的各个子任务分配各个核上运行,提高软件的运行效率。目录1、设置/获取进程间的CPU亲缘性(通过进程pid)2、设置/获取线程间的CPU亲缘性(通过线程属性指针)3、设置/获取线程的CPU亲缘性(通过线程结构 /Id )4、cpu_set_t 结构体5、函数测试6...原创 2020-03-14 15:46:22 · 3816 阅读 · 0 评论 -
linux多线程:自旋锁
1、概述自旋锁是 SMP 架构中的一种 low-level 的同步机制。当线程A想要获取一把自旋锁而该锁又被其它线程锁持有时,线程A会在一个循环中自旋以检测锁是不是已经可用了。对于使用自选锁需要注意:由于自旋时不释放CPU,因而持有自旋锁的线程应该尽快释放自旋锁,否则等待该自旋锁的线程会一直在那里自旋,这就会浪费CPU时间。 持有自旋锁的线程在sleep之前应该释放自旋锁以便其它线...转载 2020-03-13 15:28:33 · 2363 阅读 · 0 评论