linux多线程-----同步对象(互斥量、读写锁、条件变量)的属性

利用Pandas进行高效网络数据获取 本文将重点介绍如何使用Pandas库进行网络爬虫。爬取数据是获取互联网上信息的常见方式之一,而Pandas作为一种强大的数据处理和分析工具,为我们提供了便捷的方法来处理和清洗从网页上获取的数据。文章将从爬取网页数据开始,包括使用Python的Requests库发送HTTP请求获取网页内容,并使用Pandas的功能来解析和提取所需的数据。我们还将讨论如何处理网页中的表格数据、处理和清洗数据、保存数据到文件等常见任务。 阅读详情

线程具有属性,同样用于线程同步的对象也有属性,主要有互斥量、读写锁和条件变量的属性。

  1. 互斥量属性:
 #include <pthread.h>

 int pthread_mutexattr_init(pthread_mutexattr_t *attr);
 int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);

互斥量属性对象的数据类型为pthread_mutexattr_t,用函数pthread_mutexattr_init用默认的互斥量属性对该属性对象进行初始化。
用函数pthread_mutexattr_destroy对该属性对象进行回收。pthread_mutexattr_destroy函数在linux线程中什么事情也不做。

一般有两个属性值得关心:进程共享属性和类型属性。但是Linux下只支持类型属性。

进程共享属性:

int pthread_mutexattr_getpshared(const pthread_mutexattr_t * restrict attr, int *restrict pshared);
int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared);

用来获取和设置互斥量是否被共享。

The process-shared attribute is set to PTHREAD_PROCESS_SHARED to permit a mutex to be operated upon by any thread that has access to the memory where the mutex is allocated, even if the mutex is allocated in memory that is shared by multiple processes.

If the process-shared attribute is PTHREAD_PROCESS_PRIVATE, the mutex shall only be operated upon by threads created within the same process as the thread that initialized the mutex; if threads of differing processes attempt to operate on such a mutex, the behavior is undefined. The default value of the attribute shall be PTHREAD_PROCESS_PRIVATE.

上面的意思主要是:
如果属性设置为PTHREAD_PROCESS_SHARED,那么从多个进程共享的内存区域中分配的互斥量就可以用于这些进程的同步。
如果属性设置为PTHREAD_PROCESS_PRIVATE,那么互斥量只能用于一个进程中的多个线程同步。这个是默认的属性。

互斥量类型属性:

int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int kind);
int pthread_mutexattr_gettype(const pthread_mutexattr_t *attr, int *kind);

LinuxThreads supports only one mutex attribute: the mutex kind, which is either PTHREAD_MUTEX_FAST_NP for “fast “mutexes, PTHREAD_MUTEX_RECURSIVE_NP for “recursive” mutexes, or PTHREAD_MUTEX_ERRORCHECK_NP for “error checking” mutexes. As the NP suffix indicates, this is a non-por‐table extension to the POSIX standard and should not be employed in portable programs.

上面的一段话说明linux的线程仅仅支持这一种互斥量属性也就是类型属性,kind的值可以为后面三个宏:
PTHREAD_MUTEX_FAST_NP或PTHREAD_MUTEX_RECURSIVE_NP或PTHREAD_MUTEX_ERRORCHECK_NP
后缀NP的意思表明该函数不支持POSIX标准,不能在可移植的程序中使用。
默认的属性为PTHREAD_MUTEX_FAST_NP。

The mutex kind determines what happens if a thread attempts to lock a mutex it already owns with pthread_mutex_lock(3).
If the mutex is of the “fast” kind, pthread_mutex_lock(3) simply suspends the calling thread forever.
If the mutex is of the “error checking” kind,pthread_mutex_lock(3) returns immediately with the error code EDEADLK.
If the mutex is of the “recursive” kind, the call to pthread_mutex_lock(3) returns immediately with a success return code.
The number of times the thread owning the mutex has locked it is recorded in the mutex. The owning thread must call pthread_mutex_unlock(3) the same number of times before the mutex returns to the unlocked state.

上面的一段话说明,一个线程调用pthread_mutex_lock获取已经被占用的互斥量的时候,当类型属性为”fast”,该线程会被暂停。当类型属性为”error”,该线程立刻返回一个错误码EDEADLK。当属性为”recursive”,该线程会成功返回(但是mutex对象内部会有一个值记录目前有多少线程占有该互斥量,当所有占有的线程都调用pthread_mutex_unlock,该互斥量才处于未被占有的状态)。

  1. 读写锁属性:
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr);
   int pthread_rwlockattr_init(pthread_rwlockattr_t *attr);

pthread_rwlockattr_init对读写锁对象属性进行初始化,pthread_rwlockattr_destroy销毁该属性结构。

读写锁仅仅支持进程共享属性

int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t * restrict attr, int *restrict pshared);
int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, int pshared);

上面两个函数和互斥量中对应的两个函数功能是一样的。

3.条件变量属性:

int pthread_condattr_init(pthread_condattr_t *attr);
int pthread_condattr_destroy(pthread_condattr_t *attr);

pthread_condattr_init对条件变量属性初始化,pthread_condattr_destroy销毁该属性结构。

条件变量也支持进程共享属性

int pthread_condattr_getpshared(const pthread_condattr_t *restrict attr, int *restrict pshared);
int pthread_condattr_setpshared(pthread_condattr_t *attr,int pshared);

上面两个函数和互斥量中对应的两个函数功能是一样的。

车辆TBOX科普 第7次 TBOX技术深度解析:硬件架构与核心组件详解 摘要: TBOX(车载远程信息处理单元)是智能网联汽车的核心组件,承担数据采集、通信连接与安全交互等关键功能。其硬件架构以主控单元为核心,采用ARM架构处理器(如NXP i.MX系列)实现高效能低功耗处理,搭配DDR4/LPDDR5内存保障性能,eMMC/UFS存储确保数据可靠性。设计中需平衡车规级可靠性(AEC-Q100)、EMC兼容性及成本控制,同时集成通信、定位与安全模块。未来趋势聚焦异构计算、先进制程及功能安全(ASIL-D)与信息安全融合,推动TBOX向边缘计算节点演进。该技术是汽车智能化转型的重 阅读详情

相关推荐

vasp和ms_武汉理工大学赵焱课题组开发脚本 MS建模一键获取VASP输入文件POSCAR

本文给大家推介并分享一个通过Materials Studio一键获取VASP输入文件POSCAR的脚本,xsd2pos.pl。此脚本是武汉理工大学首席教授赵焱在帮助学生解决VASP计算问题时编写,解决了其他间接非手动获取POSCAR存在的问题,同时也相较于其他方法更为便捷,相信会对从事VASP计算的同行们带来便利。赵焱老师怀着哺育天下学子的情怀,希望给大家分享一下。下文介绍一下它的使用方法以及它所...

weixin_39706367的博客 2284

[Linux]-条件变量

之前我们了解过的死锁的一种情况,就是两个线程通过管道互相读取数据的时候,读的线程抢到了互斥锁,但是由于管道的读端带阻塞功能,会使读线程阻塞,造成互斥锁无法解锁,导致写端的线程也阻塞,直接造成了死锁的出现。我们可以通过设置管道读端不阻塞来解决这个问题,但是管道读端如果不阻塞的话,很难读取到数据,那么我们就要使用条件变量来解决这个问题条件变量简单的说,就是休眠当前任务,然后当需要的条件满足的时候,再次唤醒休眠的任务。通常来说,条件变量是和互斥锁一起使用的。

levi的博客 2572

别再手动测接口了!用Pytest+Requests+Allure搭建你的第一个自动化框架(附完整源码)

本文详细介绍了如何使用Pytest+Requests+Allure搭建Python接口自动化测试框架,涵盖环境准备、核心组件封装、测试用例设计、报告生成及CI/CD集成等关键步骤。通过实战案例和完整源码,帮助开发者快速构建高效的接口自动化测试解决方案,提升测试效率和质量。

weixin_42546508的博客 319

【PTHREAD】线程互斥与同步之互斥锁

【PTHREAD】线程互斥与同步之互斥锁

zhy29563 698

别再只接个放大器了!压电传感器测量电路(电压/电荷放大器)的5个实战配置要点

本文深入解析压电传感器测量电路中的5个关键实战配置要点,包括电缆长度选择、输入阻抗匹配、过载保护设计、低频噪声抑制及放大器选型策略。特别针对电压放大器和电荷放大器的应用场景差异提供工程实践建议,帮助工程师有效解决信号失真、噪声干扰等常见问题,提升测量精度和系统可靠性。

weixin_26869081的博客 301

反射机制——通过反射调用service中方法

需求:现在有一群service接口,有同一个方法名称,内部逻辑除了调用不同的调用自身的方法外其他基本都一致,那现在就需要一个独立的方法来勾勒出这个方法 1.SpringContextUtil package com.XXX.report.util; import org.apache.log4j.Logger; import org.springframework.beans.BeansE...

东天里的冬天 8520

pthread_mutex 互斥锁

互斥锁相信大家都知道其作用了,就是用来排他性的访问共享资源,那也就是说哪个线程抢到了锁那这个线程就可以独占这个共享资源,其他线程只能排队等待了。那互斥锁的用法其实也不复杂,在需要独占访问的资源地方加锁即可。

tianyexing2008的博客 2646

AD9361 LVDS数据接口时序解析与FPGA实现

本文详细解析了AD9361 LVDS数据接口的时序特性与FPGA实现方法,重点探讨了DATA_CLK、Rx_FRAME等关键信号的时序关系及数据拼接技巧。通过Verilog代码示例和调试经验分享,帮助开发者解决跨时钟域处理、IQ数据重组等常见问题,提升射频收发系统的稳定性与性能。

weixin_29186249的博客 127

各种Mutex(互斥量)的区别

原文:http://blog.youkuaiyun.com/onlyou930/article/details/6432206 各种Mutex的区别如下表: 锁类型 初始化方式 加解锁特征 调度特征 普通锁 PTHREAD_MUTEX_INITIALIZER 同一线程可重复加锁,解锁一次释放锁 ...

java开发指南博客 【转载】 250

惯性导航原理(九)-INS的初始对准-初始姿态确定+双矢量定姿

文章目录INS的初始对准INS初始化静基座/静态粗对准静态粗对准—加速度计调平原理加速度计调平静态粗对准—陀螺罗盘思考初始对准的影响因素双矢量定姿原理静态解析粗对准—双矢量定姿静态解析粗对准(续)其它初始对准方法精对准动对准 INS的初始对准 INS的初始对准为初始化的一部分 INS初始化 初始位置: 给定(INS没有初始位置确定的能力,例如从GPS ) 初始速度: 零(静止状态)或给定 初始姿态: 初始对准(INS有能力自己测资态) 粗对准vs. 精对准 静止状态vs. 运动状态 重要性: 失之毫厘,谬

十八与她的博客 1万+

基于STM32的Keil5代码自动补全设置操作指南

掌握Keil5代码自动补全设置技巧,提升STM32开发效率。通过合理配置编辑器选项,实现智能提示与语法补全,让嵌入式编程更流畅,尤其适合使用keil5代码自动补全设置的开发者快速上手。

weixin_32287387的博客 761

linux下pthread_mutex_t使用时的问题

pthread_mutex_t在Linux下有三种类型:fast,recursive,errorcheck,对应的宏是 PTHREAD_MUTEX_FAST_NP, PTHREAD_MUTEX_RECURSIVE_NP,PTHREAD_MUTEX_ERRORCHECK_NP,NP是not portable,定义mutex时如果不写,默认是fast,也就是如果已经获得了锁,再次获取会阻塞; pthread动态库里面有用于多线程的一些函数; mutex上锁函数:pthread_mutex_lock,pthrea

qq_38229124的博客 922

别再为格式发愁:safetensors转GGUF的三种高效方法及Ollama集成对比

本文详细介绍了将safetensors格式转换为GGUF格式的三种高效方法,包括llama.cpp原生转换、GGUF官方工具链和Transformers中转方案,并对比了它们在Ollama集成中的表现。文章还提供了实际项目中的踩坑经验和性能调优建议,帮助开发者快速掌握模型转换技术。

weixin_42651281的博客 640

Linux多线程同步之事件对象,linux多线程-----同步对象(互斥量、读写锁、条件变量)的属性...

线程具有属性,同样用于线程同步的对象也有属性,主要有互斥量、读写锁和条件变量的属性。互斥量属性:#includeint pthread_mutexattr_init(pthread_mutexattr_t *attr);int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);互斥量属性对象的数据类型为pthread_mutexattr_t,...

weixin_39637545的博客 240

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

10分钟搞定Linux多线程同步(互斥量,死锁、读写锁,条件变量,信号量,文件锁)

Linux C/C++多线程同步(互斥量,死锁,读写锁,条件变量,信号量,文件锁)1. 线程同步的一些概念1.1 同步的概念1.2 什么是线程同步1.3 多线程出现数据混乱(数据竞争)的原因2. 互斥量mutex2.1 mutex相关的函数和使用步骤2.1.1 初始化锁2.1.2 给共享资源加锁解锁2.2.3 摧毁锁2.2 互斥量使用的例子2.3 pthread_mutex_trylock3. 死锁4. 读写锁4.1 读写锁特性4.2 读写锁使用场景4.3 读写锁主要操作函数4.4 读写锁例子5. 条件变量

kuanyew的博客 2160

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Linux】多线程详解,一篇文章彻底搞懂多线程中各个难点!!!

多线程,从入门到入坟!

w903414的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

linux多线程-----同步机制(互斥量、读写锁、条件变量)

linux多线程-----同步机制(互斥量、读写锁、条件变量)

Be The Best! 3628

Linux线程安全,互斥量和条件变量

因此第二次申请锁失败之后这个线程就会被挂起,但是它是拿着锁被挂起的,因为被挂起了,所以就没办法释放锁,也就不会被唤醒,因此该执行流就处于一种死锁的状态了。由于–需要三条汇编指令才能完成,所以有可能线程1即thread1在执行完load 指令将共享变量ticket(1000)从内存加载到寄存器中之后就被切换了,此时thread1读到的数据是1000,当thread1被切换之后,寄存器中的数据会被当成thread1的上下文数据被保存起来,等到thread1被切回来的时候,再次恢复上下文。

m0_74189279的博客 1420

linux线程互斥量pthread_mutex_t使用简介

为什么使用线程锁 在多线程应用程序中,当多个线程共享相同的内存时,如同时访问一个变量时,需要确保每个线程看到一致的数据视图,即保证所有线程对数据的修改是一致的。 如下两种情况不存在不一致的问题: 每个线程使用的变量都是其他线程不会读取和修改的 变量是只读的 当一个线程在修改变量的值时,其他线程在读取这个变量时可能会得到一个不一致的值。 一个典型的例子是,在一个多线程程序中,两个及以上...

guotianqing的博客 8万+

Linux 多线程开发

Linux 多线程开发 3.1 线程 3.1.2 线程操作 3.1.2 线程属性 3.2 线程同步 3.2.1 互斥量/锁 3.2.2 死锁 3.2.3 读写锁 3.3 生产者消费者模型 3.3.1 条件变量 3.3.2 信号量/灯

weixin_43412762的博客 2261

多线程编程——实现线程同步的方法(互斥锁、信号量、条件变量、读写锁)

Linux 环境中,实现线程同步的常用方法有 4 种,分别称为互斥锁信号量条件变量和读写锁。互斥锁(Mutex)又称互斥量或者互斥体,是最简单也最有效地一种线程同步机制。互斥锁的用法和实际生活中的锁非常类似,当一个线程访问公共资源时,会及时地“锁上”该资源,阻止其它线程访问;访问结束后再进行“解锁”操作,将该资源让给其它线程访问。信号量又称“信号灯”,主要用于控制同时访问公共资源的线程数量,当线程数量控制在 ≤1 时,该信号量又称二元信号量,功能和互斥锁非常类似;

主要记录嵌入式学习与开发过程。 2284

Linux 互斥锁、读写锁、条件变量以及信号量

现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。都需要访问/使用同一种资源多个任务之间有依赖关系,某个任务的运行依赖于另一个任务这两种情形是多任务编程中遇到的最基本的问题,也是多任务编程中的核心问题,同步和互斥就是用于解决这两个问题的。是指散步在不同任务之间的若干程序片断,当某个任务运行其中一个程序片段时,其它任务就不能运行它们之中的任一程序片段,只能等到该任务运行完这个程序片段后才可以运行。

qq_45030264的博客 1072

Linux:线程同步机制(互斥锁、读写锁、条件变量、信号量详细分析总结)

Linux:线程同步机制(互斥锁、读写锁、条件变量、信号量详细分析总结)

qq_42279379的博客 2216

[linux c/c++] 各种锁之间的差异(自旋锁、互斥量、条件变量、屏障、读写锁)

前言: 锁,作为线程间/进程间系统资源,在应对多线程/多进程 访问相同 “资源” 场景时,扮演重要角色。用得好,可以有效地为系统解耦各个模块;但是如果用的不好,一来可能造成系统效率低下( 某条并不重要的流水线长期占据资源锁,另外重要的流水线始终无法获得访问资源的权利 ),二来可能导致系统死锁。 自旋锁: 自旋锁一般用在内核中,其逻辑行为是:“使用cpu反复执行获取锁的动作,直到获取到锁为止”。这里有几个要点: 1)自旋锁如果未获取到锁,则会立刻再次尝试 2)自旋锁的尝试是同步行为,是会占用c.

ykun089的博客 2856

信号与多线程(六)——锁、条件变量和互斥量

锁、条件变量和互斥量

weixin_73141818的博客 1182

惊!线程同步居然讲的这么详细:信号量、互斥锁、条件变量、读写锁

1.为什么要进行线程的同步操作? 我们以一个程序引出这个问题:如下: #include <stdio.h> #include<unistd.h> #include<stdlib.h> #include<pthread.h> #include<pthread.h> int val=0; void* thread_fun(void *...

李志杰的博客 5529
上一篇: C/C++—— 一个特别奇怪的C++程序
下一篇: Linux技术——gcc基础
readyao
博客等级 码龄11年 243粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值