pthread的pthread_mutex_lock 的使用

参考http://haoningabc.iteye.com/blog/1709157
在c中多线程,打印数据互相不影响的例子
关键点在pthread_mutex_lock
无锁的情况
testptread.c

#include <stddef.h>
#include <stdio.h>
#include <unistd.h>
#include "pthread.h"

void * process(void * arg)
{
int i;
fprintf(stderr, "Starting process %s\n", (char *) arg);
for (i = 0; i < 100; i++) {
write(1, (char *) arg, 1);
// fprintf(stdout, (char *) arg, 1);
}
return NULL;
}
int hello(){
printf("hello");
return 1;
}
int main()
{
int retcode;
pthread_t th_a, th_b;
void * retval;

retcode = pthread_create(&th_a, NULL, process, "a");
if (retcode != 0) fprintf(stderr, "create a failed %d\n", retcode);

retcode = pthread_create(&th_b, NULL, process, "b");
if (retcode != 0) fprintf(stderr, "create b failed %d\n", retcode);

retcode = pthread_join(th_a, &retval);
if (retcode != 0) fprintf(stderr, "join a failed %d\n", retcode);

retcode = pthread_join(th_b, &retval);
if (retcode != 0) fprintf(stderr, "join b failed %d\n", retcode);

return 0;
}

编译:

#!/bin/sh
gcc testptread.c -lpthread

输出结果
[img]http://dl2.iteye.com/upload/attachment/0094/2116/faafbc57-3836-3d2b-b32c-f03758ecda5e.jpg[/img]
a和b的打印每次输出都是不同的乱序的
-------------------------------
带锁的thread
testptread_lock.c

#include <stddef.h>
#include <stdio.h>
#include <unistd.h>
#include "pthread.h"
pthread_mutex_t mymutex=PTHREAD_MUTEX_INITIALIZER;
void * process(void * arg)
{
int i;
fprintf(stderr, "Starting process %s\n", (char *) arg);
pthread_mutex_lock(&mymutex);
for (i = 0; i < 100; i++) {
write(1, (char *) arg, 1);
// fprintf(stdout, (char *) arg, 1);
}
pthread_mutex_unlock(&mymutex);
return NULL;
}
int hello(){
printf("hello");
return 1;
}
int main()
{
int retcode;
pthread_t th_a, th_b;
void * retval;

retcode = pthread_create(&th_a, NULL, process, "a");
if (retcode != 0) fprintf(stderr, "create a failed %d\n", retcode);

retcode = pthread_create(&th_b, NULL, process, "b");
if (retcode != 0) fprintf(stderr, "create b failed %d\n", retcode);

retcode = pthread_join(th_a, &retval);
if (retcode != 0) fprintf(stderr, "join a failed %d\n", retcode);

retcode = pthread_join(th_b, &retval);
if (retcode != 0) fprintf(stderr, "join b failed %d\n", retcode);

return 0;
}

[img]http://dl2.iteye.com/upload/attachment/0094/2118/da58dee3-75ad-37b1-ab6d-bcc71f53a573.jpg[/img]

无论a,b是什么时候开始,一定是一个结束之后,锁释放后, 第二个才开始
------------------------------
如果上面的访问用进程实现
则用如下
[img]http://dl2.iteye.com/upload/attachment/0094/2130/b18ecadd-446a-3c15-9064-aac7c7e5a38b.jpg[/img]


#include <stdio.h>
char buf[]={"check lock!\n"};
int main(int argc,char *argv[]){
int i,p1,p2,fd;
fd=creat("lock.dat",0644);
write(fd,buf,20);
while((p1=fork())==-1);
if(p1==0){
lockf(fd,1,0);
for(i=1;i<=3;i++){
printf("child1!\n");
}
lockf(fd,0,0);
}else{
while((p2=fork())==-1);
if(p2==0){
lockf(fd,1,0);
for(i=1;i<=4;i++){
printf("child2!\n");
}
lockf(fd,0,0);
}else{
printf("parrent!\n");
}
}
close(fd);
}
pthread_mutex_lock的概念和使用案例 阅读详情

相关推荐

保姆级教程:在PX4 Gazebo仿真中为Iris无人机挂载Intel D435i深度相机(含完整配置流程)

本文提供在PX4 Gazebo仿真环境中为Iris无人机挂载Intel D435i深度相机的完整配置流程,涵盖环境准备、模型部署、插件安装及调试技巧。通过详细步骤和常见问题解决方案,帮助开发者快速搭建深度相机仿真环境,适用于无人机视觉开发与算法测试。

weixin_28688385的博客 335

pthread_mutex_lock函数

pthread_mutex_lock函数是一个线程同步函数,用于对互斥锁进行加锁操作。它阻塞调用线程,直到可以获得互斥锁为止。如果互斥锁已经被其他线程锁定,则调用线程将被阻塞,直到互斥锁被解锁。指向的互斥锁已经被其他线程锁定,则调用线程将被阻塞,直到互斥锁被解锁。指向的互斥锁当前没有被锁定,则调用线程将获得锁,并继续执行。该函数返回值为0表示成功加锁,非零值表示失败。函数来释放锁,以避免死锁的情况发生。是一个指向互斥锁变量的指针。

weixin_45066931的博客 6906

宝骏kiwi 630 730 560 E100 E200 E300 310 510 610 330 530维修手册电路图资料线路图接线图更新

2020-2022年宝骏RS-3维修手册和电路图。2020-2022年宝骏RS-3维修手册和电路图。2019-2021年宝骏RC-6维修手册和电路图。2019-2021年宝骏RC-6维修手册和电路图。2019-2020年宝骏RS-5维修手册和电路图。2019-2020年宝骏RS-5维修手册和电路图。2019-2020年宝骏RM-5维修手册和电路图。2019-2020年宝骏RM-5维修手册和电路图。2019-2021年宝骏510维修手册和电路图。2019-2021年宝骏510维修手册和电路图。

weixin_45821055的博客 1771

关于pthread_mutex_lock使用

关于pthread_mutex_lock使用 关于pthread_mutex_lock常用函数如下: #include <pthread.h> int pthread_mutex_destroy(pthread_mutex_t *mutex); int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_...

无专精则不能成,无涉猎则不能通 2万+

2025最新正版Autodesk 3ds Max 2022安装教程:从下载到中文环境配置全流程解析

Autodesk 3ds Max 2022是一款专业的三维建模、动画和渲染软件,广泛应用于影视制作、游戏开发、建筑可视化等领域。

waicsdn_haha的博客 1万+

LilyPad三色LED共阳极控制:从原理到Arduino编程实战

RGB LED作为可编程光源的核心组件,通过红、绿、蓝三原色的加色混合原理,能够生成丰富的色彩。其内部结构主要分为共阳极和共阴极两种类型,这决定了驱动电路的设计和编程逻辑。在电子织物和可穿戴设备领域,掌握RGB LED的控制技术对于实现动态光效和交互反馈至关重要。本文以LilyPad三色LED为例,深入解析其共阳极特性,并详细演示如何结合Arduino进行PWM编程,从而精准控制颜色与亮度,为智能服装、互动艺术装置等项目提供可靠的照明解决方案。

weixin_30237719的博客 606

pthread_mutex_lock

pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex);      描述 pthread_mutex_lock()函数锁住由mutex指定的mute

linking530的专栏 2143

从OpenClaw到Hermes Agent:AI Agent实战部署与自动化工作流构建

AI Agent(智能体)作为大语言模型(LLM)的能力延伸,其核心原理在于通过工具调用(Tool Calling)与环境交互,使模型从“对话”走向“执行”。这一技术价值在于将自然语言指令转化为具体操作,实现业务流程自动化,从而提升开发与运维效率。在应用场景上,AI Agent广泛适用于自动化运维、智能客服、数据报告生成等重复性任务处理。本文聚焦于两大热门开源框架OpenClaw与Hermes Agent,深入探讨其部署配置、技能扩展及实战联调。通过结合OpenClaw的模块化扩展能力与Hermes Age

weixin_34122810的博客 503

linux互斥锁(pthread_mutex)知识点总结

linux互斥锁(pthread_mutex)知识点总结

wei_Embedded_z的博客 6389

矩形口径喇叭天线设计——参数设置

我们建立好矩形口径喇叭天线的模型后(模型建立可参考B站相关视频或者李明洋的《HFSS天线设计》),如何修改参数达到我们的指标呢?

m0_57263863的博客 1万+

rk628d修改默认分辨率

在rk3568上使用628d hdmi转mipi,在628d已经调试好的情况下,客户新增需求:视频输入这边的推荐分辨率固定在1024x768。

m0_60805802的博客 2053

pthread_mutex_lock使用实例

相关的操作函数: int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr) —动态创建条件变量 pthread_mutex_lock —互斥锁上锁 pthread_mutex_unlock ----互斥锁解锁 pthread_cond_wait() / pthread_cond_timedwait -----等待条件变量,挂起线程,区别是后者,会有timeout时间,如 果到了timeout,线程自动解除阻塞,这个时

1457

Python爬虫实战:深度解析携程/飞猪酒店评论API与大数据采集

本文详细介绍了如何通过Python爬虫技术获取携程和飞猪平台的酒店评论数据。我们涵盖了从API分析、反爬虫对策到数据存储和处理的完整流程。API逆向分析:通过浏览器开发者工具发现和分析API接口反爬虫对策:使用请求头随机化、IP代理、浏览器自动化等技术异步处理:使用asyncio提高爬取效率数据质量:实现数据清洗和质量检查机制系统架构:构建可扩展的分布式爬虫系统未来改进方向:机器学习识别验证码分布式爬虫架构实时数据流处理更智能的反反爬虫策略。

2201_76125261的博客 601

linux下lock函数,linux下pthread_mutex_lock,pthread_mutex_unlock的使用

操作系统:Ubuntu10.04前言在家用设备上,可频繁上电,掉电。但是对于工业设备,经常都是连续工作很长时间的,因此从编程的角度而言,很多小概率发生的事情是要考虑的。如pthread_mutex_lock, pthread_mutex_unlock 这些函数的返回异常。很多时候,lock和unlock都是不做返回值判断的。lock();operation();unlock();如果不对loc...

weixin_39629129的博客 2031

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

linux下pthread_mutex_lock,pthread_mutex_unlock的使用http://blog.chinaunix.net/uid-28458801-id-4300492.ht

linux下pthread_mutex_lock,pthread_mutex_unlock的使用 2014-06-12 11:39:33 分类: LINUX 操作系统:Ubuntu10.04 前言     在家用设备上,可频繁上电,掉电。但是对于工业设备,经常都是连续工作很长时间的,因此从编程的角度而言,很多小概率发生的事情是要考虑的。如 pthread_m

诺尔曼 2024

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

pthread_mutex_lock线程锁使用简单示例

#define __USE_LARGEFILE64 #define _LARGEFILE64_SOURCE #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #include #include #include #include #include #include #include #include #inclu

oywoywoyw的专栏 5823

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

linux下错误使用pthread_mutex_lock导致程序奔溃问题分析

在进行程序开发过程中,错误使用了pthread_mutex_lock导致程序概率性的奔溃,奔溃时报如下错误: 问题分析: 本文分析在Linux应用程序中错误使用pthread_mutex锁时会概率性触发SIG_ABRT信号而导致程序崩溃(库打印输出 :Assertion `mutex->__data.__owner == 0' failed)的原因。 首先给出出错的示例程序:

yxtxiaotian的专栏 4万+

pthread_cond_wait 与 pthread_mutex_lock 合作使用详解

多线程

TuxedoLinux的博客 1665

pthread_mutex_lock互斥锁的使用

直接上个例子几简单哦! 个人认为互斥锁就是为了保护共享变量(现在看到的这个共享变量就是全局变量)而设置的, //互斥锁的使用 #include&amp;lt;errno.h&amp;gt; #include&amp;lt; cstring&amp;gt; #include&amp;lt; iostream&amp;gt; #include&amp;lt; cstdlib&amp;gt; #include&amp;lt;sy

qq_37012376的博客 2049

pthread_mutex_t 和 pthread_mutex_lock 的使用示例

pthread_mutex_lock 的使用示例

我的博客 346

pthread_mutex_lock用法

条件变量 条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。 条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作: 1)一个线程等待"条件变量的条件成立"而挂起; 2)另一个线程使"条件成立"(给...

phymat.nico的专栏 2026

用gdb脚本解决死锁的调试方法(由pthread_mutex_lock引起的死锁)

首先给出gdb定位死锁的脚本: #deadlock_debug_gdb.cmd set pagination off set logging file gdb.log set logging overwrite set logging on start set $lock_addr=pthread_mutex_lock set $unlock_addr=pthread_mutex

蔚蓝的天空Tom 4893

pthread_cond_wait 与 pthread_mutex_lock 合作使用详解。

    通常,和pthread _cond_wait 配对使用的有pthread_cond_signal 和pthread_cond_broatcast, 同时还有用于pthread_cond_t初始化的pthread_cond_init,销毁的pthread_cond_destroy函数,还有用于加锁保护的pthread_mutex_lock和pthread_mutex_unlock,稍后会对为...

salman的博客 3726

Linux中使用使用互斥量(锁)Mutex来操持多线程同步执行pthread_mutex_lock()

文章目录编程环境:背景铺垫:使用互斥量(锁) Mutex:改写例子,使用互斥量(锁)实例:下载地址: 简 述: 在 Linux 中,使用互斥量(互斥锁????) Mutex 来给保证多线程 ,在访问公共变量的时候能够 “串行” 代码。从而使得多线程正确的同步执行。关于多线程创建和使用可以参考前面几篇的文章,争取早日把 Linux 系统篇之 系统编程给发布完系列的教程。 PS:好几天没有接着学习 Li...

2302
上一篇: tcpcopy的使用
下一篇: redis验证
linux内核控
博客等级 码龄19年 41粉丝 638原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值