色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux內核實際項目中的死鎖

麥辣雞腿堡 ? 來源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-09-27 15:24 ? 次閱讀

實際項目中的死鎖

下面的例子要復雜一些,這是從實際項目中抽取出來的死鎖,更具有代表性。

#include < linux/init.h >
#include < linux/module.h >
#include < linux/kernel.h >
#include < linux/kthread.h >
#include < linux/freezer.h >
#include < linux/delay.h >


static DEFINE_MUTEX(mutex_a);
static struct delayed_work delay_task;
static void lockdep_timefunc(unsigned long);
static DEFINE_TIMER(lockdep_timer, lockdep_timefunc, 0, 0);

static void lockdep_timefunc(unsigned long dummy)
{
    schedule_delayed_work(&delay_task, 10);
    mod_timer(&lockdep_timer, jiffies + msecs_to_jiffies(100));
}

static void lockdep_test_work(struct work_struct *work)
{
    mutex_lock(&mutex_a);
    mdelay(300);//處理一些事情,這里用mdelay替代
    mutex_unlock(&mutex_a);
}

static int lockdep_thread(void *nothing)
{
    set_freezable();//清除當前線程標志flags中的PF_NOFREEZE位,表示當前線程能進入掛起或休眠狀態。
    set_user_nice(current, 0);
    while(!kthread_should_stop()){
        mdelay(500);//處理一些事情,這里用mdelay替代

        //遇到某些特殊情況,需要取消delay_task
        mutex_lock(&mutex_a);
        cancel_delayed_work_sync(&delay_task);
        mutex_unlock(&mutex_a);
    }

    return 0;
}


static int __init lockdep_test_init(void)
{
    printk("figo:my lockdep module initn");
    
   struct task_struct *lock_thread;

   /*創建一個線程來處理某些事情*/
   lock_thread = kthread_run(lockdep_thread, NULL, "lockdep_test");

   /*創建一個延遲的工作隊列*/
   INIT_DELAYED_WORK(&delay_task, lockdep_test_work);

   /*創建一個定時器模擬某些異步事件,如中斷等*/
   lockdep_timer.expires = jiffies + msecs_to_jiffies(500);
   add_timer(&lockdep_timer);
 
    return 0;
}


static void __exit lockdep_test_exit(void)
{
  printk("goodbyen");
}

MODULE_LICENSE("GPL");
module_init(lockdep_test_init);
module_exit(lockdep_test_exit);

首先創建一個lockdep_thread內核線程,用于周期性地處理某些事情,然后創建一個名為lockdep_test_worker的工作隊列來處理一些類似于中斷下半部的延遲操作,最后使用一個定時器來模擬某些異步事件(如中斷)。

在lockdep_thread內核線程中,某些特殊情況下常常需要取消工作隊列。代碼中首先申請了一個mutex_a互斥鎖,然后調用cancel_delayed_work_sync()函數取消工作隊列。另外,定時器定時地調度工作隊列,并在回調函數lockdep_test_worker()函數中申請mutex_a互斥鎖。

接下來的函數調用棧顯示上述嘗試獲取mutex_a鎖的調用路徑。兩個路徑如下:

(1)內核線程lockdep_thread首先成功獲取了mutex_a互斥鎖,然后調用cancel_delayed_work_sync()函數取消kworker。注意,cancel_delayed_work_sync()函數會調用flush操作并等待所有的kworker回調函數執行完,然后才會調用mutex_unlock(&mutex_a)釋放該鎖。

圖片

(2)kworker回調函數lockdep_test_worker()首先會嘗試獲取mutex_a互斥鎖。 注意,剛才內核線程lockdep_thread已經獲取了mutex_a互斥鎖,并且一直在等待當前kworker回調函數執行完,所以死鎖發生了

圖片

下面是該死鎖場景的CPU調用關系:

CPU0                      CPU1
----------------------------------------------------------------
內核線程lockdep_thread
lock(mutex_a)
   cancel_delayed_work_sync()
等待worker執行完成     
                                  delay worker回調函數
                                  lock(mutex_a);嘗試獲取鎖
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1376

    瀏覽量

    40319
  • Linux
    +關注

    關注

    87

    文章

    11319

    瀏覽量

    209832
  • 死鎖
    +關注

    關注

    0

    文章

    25

    瀏覽量

    8079
  • 函數
    +關注

    關注

    3

    文章

    4338

    瀏覽量

    62739
收藏 人收藏

    評論

    相關推薦

    FreeRTOS實時內核實用指南

    FreeRTOS實時內核實用指南
    發表于 09-18 08:02

    關于在實際項目中如何設計軟件實現延時?

    在現有的很多入門教程中,程序延時都是使用delay()函數,就是讓CPU在空轉,什么事情都不做。這個方法在演示實驗或者一些簡單的應用還可以使用,但是應用到實際的復雜項目中,就不行了。這會消耗大量
    發表于 12-12 16:14

    如何進行嵌入式Linux內核實時化研究?

    的設計原理和RTLinux類似,也是一個實時性應用接口。那我們究竟該如何進行嵌入式Linux內核實時化研究?修改APIC中斷函數,將APIC中斷和8254中斷排序,使得硬實時中斷的優先級大于普通8254中斷。
    發表于 08-06 07:15

    如何搭建linux內核實驗平臺

    5.3實驗內容——創建Linux內核和文件系統1.實驗目的通過移植Linux內核,熟悉嵌入式開發環境的搭建和Linux
    發表于 12-16 08:08

    linux處理機調度與死鎖

    linux處理機調度與死鎖 掌握處理機的三級調度 掌握作業調度及進程調度的概念 理解調度算法的評價準則 掌握并靈活運用常用的幾種作業調度、
    發表于 04-28 14:59 ?0次下載

    嵌入式Linux內核實時性研究及改進

    分析了嵌入式Linux 存在實時性缺陷的原因,從Linux 調度機制入手提出了可行的改進方案,并詳細闡述了代碼實現。經測試,改進后的內核實時性能得到很大提高。在嵌入式技術
    發表于 07-30 10:13 ?8次下載

    嵌入式內核實

    嵌入式內核實
    發表于 01-22 13:58 ?0次下載

    用crash工具分析Linux內核死鎖的一次實戰分享

    內核死鎖問題一般是讀寫鎖(rw_semaphore)和互斥鎖(mutex)引起的,本文主要講如何通過ramdump+crash工具來分析這類死鎖問題。
    的頭像 發表于 03-17 09:27 ?1.6w次閱讀
    用crash工具分析<b class='flag-5'>Linux</b><b class='flag-5'>內核</b><b class='flag-5'>死鎖</b>的一次實戰分享

    最硬核的Linux內核文章

    內核。 擁有超過1300萬行的代碼,Linux內核是世界上最大的開源項目之一,但是內核是什么,它用于什么? 02 什么是
    的頭像 發表于 10-19 17:46 ?2135次閱讀
    最硬核的<b class='flag-5'>Linux</b><b class='flag-5'>內核</b>文章

    快速理解什么是Linux內核以及Linux內核的內容

    01 前言 本文主要講解什么是Linux內核,以及通過多張圖片展示Linux內核的作用與功能,以便于讀者能快速理解什么是Linux
    的頭像 發表于 10-21 12:02 ?4309次閱讀
    快速理解什么是<b class='flag-5'>Linux</b><b class='flag-5'>內核</b>以及<b class='flag-5'>Linux</b><b class='flag-5'>內核</b>的內容

    如何使用Linux內核實現USB驅動程序框架

    Linux內核提供了完整的USB驅動程序框架。USB總線采用樹形結構,在一條總線上只能有唯一的主機設備。 Linux內核從主機和設備兩個角度觀察USB總線結構。本節介紹
    發表于 11-06 17:59 ?20次下載
    如何使用<b class='flag-5'>Linux</b><b class='flag-5'>內核實</b>現USB驅動程序框架

    Linux內核的鏈表數據結構

    Linux內核實現了自己的鏈表數據結構,它的設計與傳統的方式不同,非常巧妙也很通用。
    的頭像 發表于 03-24 11:34 ?850次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>的鏈表數據結構

    Linux內核實現內存管理的基本概念

    本文概述Linux內核實現內存管理的基本概念,在了解基本概念后,逐步展開介紹實現內存管理的相關技術,后面會分多篇進行介紹。
    發表于 06-23 11:56 ?849次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核實</b>現內存管理的基本概念

    Linux內核死鎖lockdep功能

    的編程思路,也不可能避免會發生死鎖。在Linux內核中,常見的死鎖有如下兩種: 遞歸死鎖:如在中斷延遲操作中使用了鎖,和外面的鎖構成了遞歸
    的頭像 發表于 09-27 15:13 ?734次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b><b class='flag-5'>死鎖</b>lockdep功能

    內核實時操作系統的介紹

    內核實時操作系統(Microkernel Real-Time Operating System, μRTOS)是一種專為實時設計的操作系統。它采用微內核架構,以提高系統的可靠性、安全性和可擴展性。以下是關于微內核實時操作系統的
    的頭像 發表于 05-11 17:13 ?525次閱讀
    主站蜘蛛池模板: 全免费午夜一级毛片| 国产AV精品国语对白国产| 欧美片内射欧美美美妇| 国产人妻人伦精品98| 浪潮AV色综合久久天堂| 2019中文字幕乱码免费| 老湿机一区午夜精品免费福利| 国产成人精品永久免费视频| 英国video性精品高清最新| 麻豆XXXX乱女少妇精品| 啊片色播电影| 渔夫床满艳史bd高清在线直播| 偷偷要色偷偷| 日本电影小姐| 免费可以看污动画软件| 吉吉影音先锋av资源| 国产精品久久久久久久久99热| 白丝女仆被啪到深夜漫画| 34g污奶绵uk甩奶| 在教室伦流澡到高潮HNP视频 | 成人国产在线观看| 97精品国产高清在线看入口| 少妇一夜未归暴露妓女身份| 黄色软件视频app| 国产国语在线播放视频| xxxx老妇性hdbbbb| 亚洲黄色在线| 美女内射视频WWW网站午夜| 成年人视频免费在线观看| 美女屁股软件| 精品无码久久久久久久久| 94vvv男人的天堂| 一区二区三区无码高清视频| 学校女性奴sm训练调教| 丝瓜视频樱桃视频在线观看免费| 欧美日韩中文在线字幕视频| 男人J桶女人P视频无遮挡网站| 久久久国产精品免费A片3D| 纯肉宠文高h一对一| brazzers情欲狂欢| 亚洲免费精品视频|