linux线程锁

Linux 互斥量、线程锁使用总结 在多线程编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。 每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻, 只能有一个线程访问该对象。 互斥锁也叫线程锁,线程锁可以保证,在任意时刻,只有一个线程访问该对象。同一时间只有一个线程访问数据。互斥量(mutex)就是一把锁。多个线程只有一把锁一个钥匙,谁上的锁就只有谁能开锁。当一个线程要访问一个共享变量时,先用锁把变量锁住,然后再操作,操作完了之后再释放掉锁,完成。 当另一个... 阅读详情
#include <pthread.h>
#include <stdio.h>
#include <sys/time.h>
#include <string.h>
#define MAX 20

pthread_t thread[2];
pthread_mutex_t mut;
int number=0, i;

void *thread2()
{
        printf ("thread2 : I'm thread 2/n");

        for (i = 0; i < MAX; i++)
        {
                printf("/tthread2 : number = %d/n",number);
                pthread_mutex_lock(&mut);
                        number++;
                pthread_mutex_unlock(&mut);
                sleep(1);
        }


        printf("thread2 :主函数在等我完成任务吗?/n");
        pthread_exit(NULL);
}

void *thread3()
{
        printf("thread3 : I'm thread 3/n");

        for (i = 0; i < MAX; i++)
        {
                printf("/tthread3 : number = %d/n",number);
                pthread_mutex_lock(&mut);
                        number++;
                pthread_mutex_unlock(&mut);
                sleep(2);
        }


        printf("thread3 :主函数在等我完成任务吗?/n");
        pthread_exit(NULL);
}

void thread_create(void)
{
        int temp;
        memset(&thread, 0, sizeof(thread));          //comment2
        /*创建线程*/
        if((temp = pthread_create(&thread[0], NULL, thread2, NULL)) != 0)       //comment3
                printf("线程2创建失败!/n");
        else
                printf("2被创建/n");

        if((temp = pthread_create(&thread[1], NULL, thread3, NULL)) != 0)  //comment3
                printf("3创建失败");
        else
                printf("3被创建/n");
}

void thread_wait(void)
{
        /*等待线程结束*/
        if(thread[0] !=0) {                   //comment4
                pthread_join(thread[0],NULL);
                printf("线程-----2已经结束/n");
        }
        if(thread[1] !=0) {                //comment5
                pthread_join(thread[1],NULL);
                printf("线程----3已经结束/n");
        }
}

int main()
{
        /*用默认属性初始化互斥锁*/
        pthread_mutex_init(&mut,NULL);

        printf("我是主函数哦,我正在创建线程,呵呵/n");
        thread_create();
        printf("我是主函数哦,我正在等待线程完成任务阿,呵呵/n");
        thread_wait();
        return 0;
}
解锁Linux多线程编程的技巧——掌握线程锁的使用方法 比如对全局变量的访问,有时要加锁,操作完了,在解锁。执行以上的代码,我们会发现,得到的结果是混乱的,出现上述的最主要的原因是,我们在编写多线程代码的过程中,每一个线程都尝试去写同一个文件,这样便出现了上述的问题,这便是共享资源的同步问题,在Linux编程中,线程同步的处理方法包括:信号量,互斥锁和条件变量。当使用pthread_mutex_lock()函数进行加锁时,若此时已经被锁,则尝试加锁的线程会被阻塞,直到互斥锁被其他线程释放,当pthread_mutex_lock()函数有返回值时,说明加锁成功; 阅读详情

相关推荐

【UV打印机】PrintExp打印软件教程(六)-高级模式(马达)

输入高级模式密码进入高级模式高级模式界面有操作栏、控制栏、参数栏及参数界面操作栏名称功能说明文件加载数据从板卡加载参数保存将参数保存到主板退出退出高级模式固件导入固件导入配套版本下的固件配置*xpcfx导出固件导出当前使用的固件配置*xpcfx导入波形文件导入对应的波形文件*waf操作初始化系统继续初始化动作复位X轴复位回原点控制栏可进行小车运动、闪喷操作(此闪喷为点击进行闪喷,不受平台位置限制),无清洗功能。

Print World的专栏 3112

Linux 线程 —— 锁相关

【代码】Linux 线程 —— 锁相关。

Outside_的博客 1407

GPU服务器选购避坑指南:从硬件配置到场景化性能调优

本文提供GPU服务器选购的全面指南,涵盖硬件架构解析、应用场景配置策略和性能调优实践。针对大模型训练、推理服务和科学计算等场景,详细分析GPU选型、内存带宽匹配和散热设计等关键因素,帮助技术决策者避免常见配置误区,实现成本效益最大化。

peace的博客 1030

Linux多线程(线程互斥与线程锁)

当线程A被切换走时(是带着上下文数据1一起被切走的),线程B到来,它的al寄存器中的值为0(线程设置的是自己的上下文数据,互相不冲突),进行交换mutex的值和al寄存器的值(0和0交换),最终B拿到的值是0,发生挂起等待。它的寄存器al的数据现在是0,执行交换操作,将内存中mutex的值交换给A的寄存器al中,此时线程A的al值为1,内存中mutex的值为0。过了一会,A线程带着它的临时数据1000回来了,它认为tickets的值还是原来的1000,执行–操作,将值变成了999,此时写回内存中。...

分享学习的知识,记录我的技术成长道路 4185

宜搭,高级认证实操2,FaaS连接器指导教程

找到FaasEntry.java将如下代码整体替换,注意引包。如图所示在util下新建EDSUtil.java代码如下。回到连接器界面点击右上角测试-->测试。连接器工厂-->新建FaaS连接器。保存-->前往云IDE开发。返回如图所示代码,部署成功。

2301_80286061的博客 3342

python——体育收入排行2012-2019

请分析文件并读取数据,完成以下功能: 1. 某年的收入排名前若干名选手 如果输入n是2012-19之间的年份,则可以输入整数k,输出n年的前k名排名信息。如果k大于当年排名运动员人数,则输出当年所有的信息。每行一名运动员信息,以' | '间隔该行各项信息。 2. 某年属于某个运动项目的所有运动员信息,和收入总和 如果输入的是'sport'(不区分大小写),则可以继续输入一个年份201*,输出一个当年排行中的运动项目菜单,按照字符串升序排列,格式见示例,再输入运动项目对应的数字来输出该项运动当

m0_62488776的博客 2257

Linux线程的加锁

抢票,加锁解锁,锁的原理,可重入与线程安全

CHJBL的博客 685

重带电粒子的能量歧离(energy straggling)

能量歧离,Bethe-Bloch

G751888629的博客 2298

Linux的线程锁

1.互斥锁 在线程实际运行过程中,我们经常需要多个线程保持同步。这时可以用互斥锁来完成任务。 1.1锁的创建 互斥锁可以动态或静态的被创建,可以用宏PTHREAD_MUTEX_INITIALIZER来静态的初始化锁,采用这种方式比较容易理解,互斥锁是pthread_mutex_t的结构体,而这个宏是一个结构常量,如下可以完成静态的初始化锁: pthread_mutex_t mutex =PTHRE...

u010304442的博客 6428

【AUTOSAR-E2E】-2.3-配置E2E:基于E2EPW配置一个RX接收的Signal Group(使用E2E Profile 1)

《共13页精讲》:此法也适用于E2E Profile 4/5/6/7/11/22 目录 1 检查CAN Matrix Arxml/DBC是否满足E2E需求 2 在DaVinci Developer中为Port添加E2E保护 3 在DaVinci Configurator settings设置 4 如何使用应用层的E2E保护 5 结尾 <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <-.

「汽车电子助手」的博客 3952

偏最小二乘回归分析原理详解和案例分析实例

偏最小二乘回归分析原理详解背景偏最小二乘回归分析 Partial least squares regression analysis基本思想建模步骤步骤一:分别提取两变量组的第一对成分,并使之相关性达最大步骤二:建立 y1,⋯ ,yp\boldsymbol{y}_{1}, \cdots, \boldsymbol{y}_{p}y1​,⋯,yp​ 对 u1\boldsymbol{u}_{1}u1​ 的回归及 x1,⋯ ,xm\boldsymbol{x}_{1}, \cdots, \boldsymbol{x}_{

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 9977

漫话linux:线程锁

一个函数在重入的情况下,运行结果不会 出现任何不同或者任何问题,则该函数被称为可重入函数,否则,是不可重入函数,可重入的一般也是线程安全的。临界区中,线程可以切换,在线程被切出去的时候,是持有锁被切走的。我不在期间,照样没有人能进入临界区访问临界资源,对于其他线程来讲,一个线程要么么有锁,要么释放锁,当前线程访问临界区的过程,对于其他线程是原子的。交换的本质:把内存中的数据(共享),交换到 CPU 的寄存器中,其实是换到 CPU 此时执行的线程的硬件上下文中,数字 1 (锁)只有一个,随着上下文走了。

whcwhc111111的博客 959

YOLOv8【第十章:多任务扩展深度篇·第1节】YOLOv8-Seg 实例分割:Mask原型生成与系数预测原理解析!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1810

linux的线程锁

#include <stdio.h> #include <string> #include <iostream> #include <pthread.h> #include <queue> #include <unistd.h> pthread_mutex_t mMutex; pthread_cond_t mCond; pthread_condattr_t mAttr; std::queue<std::string>..

sy84436446的博客 293

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

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

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Linux 线程锁详解

Linux 线程锁详解             原文地址 在Posix Thread中定义有一套专门用于线程同步的mutex函数。   1. 创建和销毁   有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_

wjh_monkey的博客 537

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

linux下使用线程锁互斥访问资源

linux使用线程锁访问互斥资源: 1、线程锁的创建  pthread_mutex_t g_Mutex;   2、完整代码如下 1 #include &lt;stdio.h&gt; 2 #include &lt;string.h&gt; 3 #include &lt;pthread.h&gt; 4 #include &lt;stdlib.h&gt; ...

weixin_34344403的博客 173

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux 线程锁,条件变量 信号量的区别

一) 线程锁 1) 只能用于"锁"住临界代码区域 2) 一个线程加的锁必须由该线程解锁. 锁几乎是我们学习同步时最开始接触到的一个策略,也是最简单, 最直白的策略. 二) 条件变量,与锁不同, 条件变量用于等待某个条件被触发 1) 大体使用的伪码: // 线程一代码 pthread_mutex_lock(&mutex); // 设置条件为true pthread_co

sunnyboy_cia的专栏 5388

linux c 线程锁

线程锁初始化:int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr) 如果是非动态锁结构,也可以使用PTHREAD_MUTEX_INITIALIZER赋值进行初始化。 线程锁销毁:int pthread_mutex_destroy(pthread_mutex_t *mutex) 锁:int

1140

Linux 线程和线程锁

1 创建、等待、终止线程 线程创建 #include <pthread.h> /**@param tidp -新创建的线程ID指向的内存单元。 * @param attr -线程属性,默认为NULL * @param start_rtn -线程函数 * @param arg -线程函数的传入参数 * @return 0 创建成功 * -1 创建失败 */ int pthread_creat

Rareay 456

Linux中,常见的线程锁有哪些?

使用方法:通过pthread_mutex_init函数初始化锁,在对共享资源进行访问前先使用pthread_mutex_lock函数获取锁,访问完毕后使用pthread_mutex_unlock函数释放锁。使用方法:通过pthread_spin_init函数初始化锁,在对共享资源进行访问前先使用pthread_spin_lock函数获取锁,访问完毕后使用pthread_spin_unlock函数释放锁。Linux系统提供多种不同类型的锁,常见的有互斥锁、自旋锁、读写锁,接下来是详细的内容介绍。

oldboyedu1的博客 217

linux 线程锁使用问题

最近遇到2个线程锁的问题:记录如下 1)线程锁初始化的方式: 线程初始化,可以有2中方式,a,直接赋初值初始化;b,使用 pthread_mutex(); 方式1:unsigned int g_deviceManage.mutex = STATE_INVALID; 方式2:pthread_mutes_init(g_deviceManage.mutex); 2)死锁问题:在一个函数func( )中,已经获取到锁,但在子函数func_a( )中,却又对全局变量进行加锁,解锁处理;后面func( ..

llzhang_fly的博客 651

Linux中的线程锁与条件变量

线程锁初始化Linux中使用数据类型pthread_mutex_t,线程锁的初始化有两种方式: 静态初始化:在LinuxThreads实现中,pthread_mutex_t是一个结构,而PTHREAD_MUTEX_INITIALIZER则是一个结构常量。 pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; 动态初始化:动态初始化使用pthread_mut

Jayn的专栏 610

Linux线程锁

互斥锁(mutex是一种简单的加锁的方法来控制对共享资源的访问。在同一时刻只能有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行访问。若其他线程希望上锁一个已经被上了互斥锁的资源,则该线程挂起,直到上锁的线程释放互斥锁为止。//mutex:互斥锁/*mutexattr:互斥锁属性分为快速互斥锁(PTHREAD_MUTEX_INITIALIZER)递归互斥锁(PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP)

Rain_bow_的博客 179

Linux 线程锁

两个线程分别计算从1加到100,并且把结果都存储在count变量中。因此为了保证数据的线程安全,在对count值进行写操作时要加锁。加锁可以通过 pthread_mutex_lock() 和 pthread_mutex_unlock() 两个函数来实现加锁与释放锁。 但是实际应用中为了代码简洁以及防止程序员漏掉unlock,所以通过一个线程锁对象来实现线程锁的自释放。 Thre

chen199199的专栏 742

Linux下面的线程锁,条件变量以及信号量的使用

Linux下面的线程锁,条件变量以及信号量的使用 一) 线程锁 1) 只能用于"锁"住临界代码区域 2) 一个线程加的锁必须由该线程解锁. 锁几乎是我们学习同步时最开始接触到的一个策略,也是最简单, 最直白的策略. 二) 条件变量,与锁不同, 条件变量用于等待某个条件被触发 1) 大体使用的伪码: // 线程一代码 pthread_mutex_lock(&mutex

EvoShark的专栏 600
上一篇: linux pthread
下一篇: C语言测试题的讲解分析(转)
guowake
博客等级 码龄19年 62粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值