<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        [RTT例程練習]2.2信號量之基本使用(動態/靜態信號量)

        來源:懂視網 責編:小采 時間:2020-11-09 08:03:43
        文檔

        [RTT例程練習]2.2信號量之基本使用(動態/靜態信號量)

        [RTT例程練習]2.2信號量之基本使用(動態/靜態信號量):信號量的解釋: 來自百度百科: 信號量(Semaphore),有時被稱為信號燈,是在多線程環境下使用的一種設施,是可以用來保證兩個或多個關鍵代碼段不被并發調用。在進入一個關鍵代碼段之前,線程必須獲取一個信號量;一旦該關鍵代碼段完成了,那么該線程必須釋放
        推薦度:
        導讀[RTT例程練習]2.2信號量之基本使用(動態/靜態信號量):信號量的解釋: 來自百度百科: 信號量(Semaphore),有時被稱為信號燈,是在多線程環境下使用的一種設施,是可以用來保證兩個或多個關鍵代碼段不被并發調用。在進入一個關鍵代碼段之前,線程必須獲取一個信號量;一旦該關鍵代碼段完成了,那么該線程必須釋放

        信號量的解釋: 來自百度百科: 信號量(Semaphore),有時被稱為信號燈,是在多線程環境下使用的一種設施,是可以用來保證兩個或多個關鍵代碼段不被并發調用。在進入一個關鍵代碼段之前,線程必須獲取一個信號量;一旦該關鍵代碼段完成了,那么該線程必須釋放

        信號量的解釋:

        來自百度百科:

        信號量(Semaphore),有時被稱為信號燈,是在多線程環境下使用的一種設施,是可以用來保證兩個或多個關鍵代碼段不被并發調用。在進入一個關鍵代碼段之前,線程必須獲取一個信號量;一旦該關鍵代碼段完成了,那么該線程必須釋放信號量。

        RT-Thread 的信號量有靜態和動態,這里同線程的靜態和動態是一個意思。對信號量有兩種操作,take 和 release。

        程序中,首先初始化信號量為0,這時首先使用take,并只等待10個tick,故一定會超時,因為信號量初始值為0,take不到。然后release一次,信號量便增加1,這時再次take,并且使用的是wait forever 的方式,便一定能得到信號量。

        程序:

        #include 
        
        static struct rt_semaphore static_sem;
        
        static rt_sem_t dynamic_sem = RT_NULL;
        
        static rt_uint8_t thread1_stack[1024];
        struct rt_thread thread1;
        static void rt_thread_entry1(void *parameter)
        {
         rt_err_t result;
         rt_tick_t tick;
        
         /* static semaphore demo */
         tick = rt_tick_get();
        
         /* try to take the sem, wait 10 ticks */
         result = rt_sem_take(&static_sem, 10);
        
         if (result == -RT_ETIMEOUT)
         {
         if (rt_tick_get() - tick != 10)
         {
         rt_sem_detach(&static_sem);
         return ;
         }
         rt_kprintf("take semaphore timeout\n");
         } 
         else 
         {
         rt_kprintf("take a static semaphore, failed.\n");
         rt_sem_detach(&static_sem);
         return ;
         } 
        
         /* release the semaphore */ 
         rt_sem_release(&static_sem); 
         /* wait the semaphore forever */
         result = rt_sem_take(&static_sem, RT_WAITING_FOREVER);
        
         if (result != RT_EOK)
         {
         rt_kprintf("take a static semaphore, failed.\n");
         rt_sem_detach(&static_sem);
         return ;
         }
        
         rt_kprintf("take a static semaphore, done.\n");
         /* detach the semaphore object */
         rt_sem_detach(&static_sem);
        //}
        
        /* dynamic thread pointer */
        //static void thread2_entry(void *parameter)
        //{
        // rt_err_t result;
        // rt_tick_t tick;
        
         tick = rt_tick_get();
        
         /* try to take the semaphore, wait for 10 ticks */
         result = rt_sem_take(dynamic_sem, 10);
         if (result == -RT_ETIMEOUT)
         {
         if (rt_tick_get() - tick != 10)
         {
         rt_sem_delete(dynamic_sem);
         return ;
         } 
         rt_kprintf("take semaphore timeout\n");
         }
         else
         {
         rt_kprintf("take a dynamic semaphore, failed.\n");
         rt_sem_delete(dynamic_sem);
         return ;
         }
        
         /* release the dynamic semaphore */
         rt_sem_release(dynamic_sem);
         /* wait forever */
         result = rt_sem_take(dynamic_sem, RT_WAITING_FOREVER);
        
         if (result != RT_EOK)
         {
         rt_kprintf("take a dynamic semaphore, failed.\n");
         rt_sem_delete(dynamic_sem);
         return ;
         }
        
         rt_kprintf("take a dynamic semaphore, done.\n");
         /* delete the semaphore*/
         rt_sem_delete(dynamic_sem);
        }
        //static rt_thread_t tid = RT_NULL;
        int rt_application_init()
        {
         rt_err_t result;
        
         result = rt_sem_init(&static_sem,
         "ssem",
         0, RT_IPC_FLAG_FIFO);
         if (result != RT_EOK)
         {
         rt_kprintf("init static semaphore failed. \n");
         return -1;
         }
        
         dynamic_sem = rt_sem_create("dsem",
         0, RT_IPC_FLAG_FIFO);
         if (dynamic_sem == RT_NULL)
         {
         rt_kprintf("create dynamic semaphore failed. \n");
         return -1;
         }
        
         /* thread1 init */
         rt_thread_init(&thread1, 
         "t1", 
         rt_thread_entry1, RT_NULL,
         &thread1_stack[0], sizeof(thread1_stack),
         11, 5
         );
         rt_thread_startup(&thread1);
        
         return 0;
        }

        結果為:
        take semaphore timeout
        take a staic semaphore, done.
        take semaphore timeout
        take a dynamic semaphore, done.

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        [RTT例程練習]2.2信號量之基本使用(動態/靜態信號量)

        [RTT例程練習]2.2信號量之基本使用(動態/靜態信號量):信號量的解釋: 來自百度百科: 信號量(Semaphore),有時被稱為信號燈,是在多線程環境下使用的一種設施,是可以用來保證兩個或多個關鍵代碼段不被并發調用。在進入一個關鍵代碼段之前,線程必須獲取一個信號量;一旦該關鍵代碼段完成了,那么該線程必須釋放
        推薦度:
        標簽: 使用 信號 動態
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 成人电影在线免费观看| 91福利免费网站在线观看| 免费国产黄网站在线观看视频| 亚洲综合AV在线在线播放| 国产高潮流白浆喷水免费A片 | 亚洲午夜精品久久久久久浪潮| 国产精品99爱免费视频| 亚洲日韩精品一区二区三区| 日本不卡免费新一区二区三区| 亚洲va久久久噜噜噜久久男同| 全免费a级毛片免费看| 亚洲成av人片不卡无码| 国产三级在线观看免费| 亚洲男同gay片| 亚洲欧洲精品成人久久曰影片| 一级免费黄色大片| 亚洲国产高清人在线| 18禁止观看免费私人影院| 亚洲精品GV天堂无码男同| 又黄又大又爽免费视频| 中文在线免费视频| 亚洲福利一区二区三区| 日本免费的一级v一片| a级毛片免费网站| 亚洲精品成人网站在线播放| 天天摸夜夜摸成人免费视频 | 亚洲国产成人超福利久久精品 | 日韩黄色免费观看| 国产日韩精品无码区免费专区国产 | 亚洲AV无码码潮喷在线观看| 国产精品视频免费观看| 最新亚洲人成无码网www电影| 一本色道久久综合亚洲精品高清 | 香港一级毛片免费看| 国产v亚洲v天堂无码网站| 毛片免费vip会员在线看| 色老头综合免费视频| 亚洲美女中文字幕| 免费人妻av无码专区| 99久久国产免费-99久久国产免费 99久久国产免费中文无字幕 | 91精品免费国产高清在线|