小例子:实现互斥锁,自旋锁

2023-11-12

小例子实现互斥锁,自旋锁

在多线程并发访问临界区时,使用上面三种操作,可以实现并发访问。
首先创建是个线程

   for(i = 0;i<THREAD_COUNT;i++)
    {
        pthread_create(&threadid[i],NULL,thread_callback,&count);//返回线程的ID传回的是地址
    }

其次编辑回调函数,回调函数实现的是让pcount的值达到1000000,达到一百万的过程是十个线程的共同作用结果。

void thread_callback(void *arg)
{
    int *pcount = (int *)arg;
    int i = 0;
    while(i++ <100000)
    {
        (*pcount)++;
        pthread_mutex_unlock(&mutex);

        inc(pcount,1);
        usleep(1);
    }
}

在实现的过程中,会出现打断,达到预期效果

  1. 自旋锁实现临界区访问
//创建自旋锁
pthread_spinlock_t spinlock;
//初始化自旋锁
pthread_spinlock_init(&spinlock);
//开锁
pthread_spin_lock(&lock);
//关锁
pthread_spin_unlock(&lock);
void thread_callback(void *arg)
{
    int *pcount = (int *)arg;
    int i = 0;
    while(i++ <100000)
    {
        pthread_spin_lock(&mutex);
        (*pcount)++;
        pthread_spin_unlock(&mutex);
        usleep(1);
    }
}

自旋锁过程是:自旋等待,访问,返回。适用于自旋锁的条件是锁中执行的内容尽可能的少。
2. 互斥锁
互斥锁的实现与自旋锁类似,

//创建互斥锁
pthread_mutex_t mutex;
//初始化互斥锁锁
pthread_mutex_init(&mutex,NULL);;
//开锁
pthread_mutex_lock(&mutex);
//关锁
pthread_mutex_unlock(&lock);
        pthread_mutex_lock(&mutex);
        (*pcount)++;
        pthread_mutex_unlock(&mutex);

互斥锁实现时,当发现临界区上锁,无法访问,应当让出CPU进入阻塞状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小例子:实现互斥锁,自旋锁 的相关文章

  • 06makefile学习之三个自动变量($@,$^,$<),模式规则和静态模式规则

    06makefile学习之三个自动变量 lt 和模式规则 以下为相关makefile的学习文章 01makefile学习之GCC编译的四个阶段 带编译阶段 汇编阶段 S c的区别 02makefile学习之makefile的基本原则 03m
  • linux文件编程(4)—— 用ANSIC标准C库函数进行文件编程:fopen、fread、fwrite、fseek

    参考 linux文件编程 5 用ANSIC标准中的C库函数进行文件编程 作者 丶PURSUING 发布时间 2021 04 11 11 58 25 网址 https blog csdn net weixin 44742824 article
  • Linux·异步IO编程框架

    hi 大家好 今天分享一篇Linux异步IO编程框架文章 对比IO复用的epoll框架 到底性能提高多少 让我们看一看 译者序 本文组合翻译了以下两篇文章的干货部分 作为 io uring 相关的入门参考 How io uring and
  • 08LinuxC线程学习之pthread_join函数以及根据参2获取返回值的案例

    1 pthread join函数 int pthread join pthread t thread void retval 功能 阻塞等待线程退出 获取线程退出状态 其作用 对应进程中 waitpid 函数 成功 0 失败 错误号 参1
  • Linux·C/C++主线程对子线程的影响

    这篇文章主要介绍了简单了解C语言中主线程退出对子线程的影响 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友可以参考下 对于程序来说 如果主进程在子进程还未结束时就已经退出 那么Linux内核会将子进程
  • 线程的属性 —— 分离的状态(detached state)、栈地址(stack address)、栈大小(stack size)

    参考 四十二 线程 线程属性 作者 FadeFarAway 发布时间 2017 01 17 14 09 55 网址 https blog csdn net FadeFarAway article details 54576771 目录 引入
  • Linux:进程等待wait函数&阻塞

    进程等待的作用 父进程在它的执行代码中调用进程等待的方法 等待子进程退出 防止子进程变成僵尸进程 也就是说 进程等待是父进程调用某个接口进行等待 父进程等待子进程退出回收子进程的资源 防止子进程变成僵尸进程 进程等待的方法 如何让父进程进行
  • [源码解读]深入理解pthread中的condition条件变量

    深入理解pthread中的condition条件变量 文章目录 深入理解pthread中的condition条件变量 pthread cond init c pthread cond wait c pthread cond signal c
  • Posix信号量

    Posix信号量 一 Posix信号量 1 概述 二 Posix提供两种信号量 有名信号量和基于内存的信号量 三 命名信号量 1 sem open和sem close函数 2 sem unlink函数 3 sem wait函数 5 sem
  • Makefile(面试必备)

    1 Makefile基本介绍 1 1 makefile介绍 make是一个工程管理器 它可以根据文件时间自发检测更新的文件从而减少编译量 makefile文件和make工具一起使用 用于控制工程项目的编译和链接 也可以用来编写手册页和程序的
  • 【Linux系统编程】20.程序、进程、CPU和MMU、PCB

    目录 程序 进程 CPU和MMU PCB 程序 编译好的二进制文件 存在磁盘上 只占用磁盘资源 进程 进程是活跃的程序 占用系统资源 在内存中执行 程序运行起来 产生一个进程 程序类似于剧本 进程类似于一场戏 一场戏需要舞台 演员 灯光 道
  • 进程的相概念(linux系统编程)

    什么是程序 什么是进程 有什么区别 程序是静态的概念 gcc xx x o pro 磁盘中生成的pro就是程序 进程是程序的一次运行活动 通俗的讲就是程序跑起来了 系统中就多了一个进程 在Linux里面怎么查看系统中有哪些进程 使用ps指令
  • [Linux系统编程]守护进程/线程(四)

    距离上一次利用高并发技术实现360度行车记录仪功能已经过去半年了 开始写一系列关于系统编程和网络编程内容进行总结 温故而知新 欢迎大家讨论学习 2021 09 05 补充 1 dup2与dup区别是dup2可以用参数newfd指定新文件描述
  • Linux下进程内存空间组成/进程的内存映像

    http blog csdn net yusiguyuan article details 45155035 http javathinker iteye com blog 1733058 前言 在偏底层的开发中 需要了解程序的是如何存储的
  • FTP云盘

    参考 FTP云盘项目 作者 糯米啊啊 发布时间 2021 08 19 10 34 05 网址 https blog csdn net weixin 43732386 spm 1001 2014 3001 5509 参考 自制FTP云盘项目
  • Linux系统编程(七)--线程控制

    文章目录 1 线程属性 1 1 pthread attr t 1 2 不同属性的作用 2 互斥量的共享属性 2 1 属性的初始化与回收 2 2 共享属性 3 互斥量的鲁棒属性 3 1 相关函数 3 2 互斥量状态一致性 4 递归型互斥量 4
  • 六、Linux系统编程:读写锁

    5 读写锁 读写锁 ReentrantReadWriteLock 就是读线程和读线程之间不互斥 读读不互斥 读写互斥 写写互斥 一个资源可以被多个读线程访问 也可以被一个写线程访问 但不能同时存在读写线程 读写互斥 读读共享 5 1 锁操作
  • fgetc、fgets用法 && 实现cp操作

    fgetc函数原型 int fgetc FILE stream 为什么fgetc返回的是int而不是char 通过man fgetc查看其返回值 fgetc getc and getchar return the character rea
  • pthread_detach函数

    int pthread detach pthread t thread 成功 0 失败 错误号 作用 从状态上实现线程分离 注意不是指该线程独自占用地址空间 线程分离状态 指定该状态 线程主动与主控线程断开关系 线程结束后 不会产生僵尸线程
  • 【Linux学习笔记】7. Linux文件IO详解(附代码实例)

    Linux文件I O 前置知识 Linux文件I O分为系统IO和标准IO 常用于系统编程 系统I O通过文件描述符 fd 来操作文件 标准I O通过文件流 FILE 来操作文件 Linux下可以使用man命令来查看使用手册 学习和使用这些

随机推荐