日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Linux內(nèi)核工作隊(duì)列是什么

今天就跟大家聊聊有關(guān)Linux內(nèi)核工作隊(duì)列是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)建站是一家從事企業(yè)網(wǎng)站建設(shè)、成都網(wǎng)站制作、做網(wǎng)站、行業(yè)門(mén)戶(hù)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)制作的專(zhuān)業(yè)網(wǎng)站建設(shè)公司,擁有經(jīng)驗(yàn)豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁(yè)設(shè)計(jì)人員,具備各種規(guī)模與類(lèi)型網(wǎng)站建設(shè)的實(shí)力,在網(wǎng)站建設(shè)領(lǐng)域樹(shù)立了自己獨(dú)特的設(shè)計(jì)風(fēng)格。自公司成立以來(lái)曾獨(dú)立設(shè)計(jì)制作的站點(diǎn)上1000家。

1、共享工作隊(duì)列

1)、靜態(tài)定義

宏:DECLARE_WORK(n, f),文件:include/linux/workqueue.h,定義如下:

#define DECLARE_WORK(n, f)                      \    struct work_struct n = __WORK_INITIALIZER(n, f)

參數(shù):

n:表示工作任務(wù)的名稱(chēng);

f:表示工作任務(wù)的實(shí)現(xiàn)函數(shù);

類(lèi)似接口:DECLARE_DELAYED_WORK(n, f),創(chuàng)建延時(shí)工作任務(wù)。

2)、動(dòng)態(tài)定義

文件:include/linux/workqueue.h,定義如下:

#define INIT_WORK(_work, _func)                     \    __INIT_WORK((_work), (_func), 0)

參數(shù):

_work:表示工作任務(wù)的名稱(chēng);

_func:表示工作任務(wù)的實(shí)現(xiàn)函數(shù);

2、自定義工作隊(duì)列

文件:include/linux/workqueue.h,定義如下:

#define create_workqueue(name)                      \    alloc_workqueue("%s", WQ_MEM_RECLAIM, 1, (name))    #define create_singlethread_workqueue(name)             \    alloc_ordered_workqueue("%s", WQ_MEM_RECLAIM, name)

參數(shù):

name:工作隊(duì)列名稱(chēng)。傳入值為字符串,和共享工作隊(duì)列里的參數(shù)不同。

返回值:工作隊(duì)列指針

二、常用接口說(shuō)明
工作任務(wù)定義工作任務(wù)添加工作任務(wù)清除工作任務(wù)取消
DECLARE_WORK()schedule_work()flush_work()cancel_work_sync()
DECLARE_DELAYED_WORK()schedule_delayed_work()flush_delayed_work()cancel_delayed_work() cancel_delayed_work_sync()
INIT_WORK()schedule_work()flush_work()cancel_work_sync()
INIT_DELAYED_WORK()schedule_delayed_work()flush_delayed_work()cancel_delayed_work() cancel_delayed_work_sync()
create_workqueue()queue_work() queue_delayed_work() queue_work_on()flush_workqueue()destroy_workqueue()
create_singlethread_workqueue()queue_work()flush_workqueue()destroy_workqueue()

注:

1、flush_work():堵塞工作任務(wù),直到工作任務(wù)完成

2、flush_delayed_work():等待延時(shí)工作任務(wù)完成

3、cancel_work_sync():取消工作任務(wù)并等待它完成

4、cancel_delayed_work():取消延時(shí)工作任務(wù)

5、cancel_delayed_work_sync():取消延時(shí)工作任務(wù)并等待它完成

6、create_workqueue():對(duì)于多CPU系統(tǒng),內(nèi)核會(huì)在每個(gè)CPU上創(chuàng)建一個(gè)工作隊(duì)列,使線程處理并行化

7、create_singlethread_workqueue():內(nèi)核只在一個(gè)CPU上創(chuàng)建一個(gè)工作隊(duì)列

8、queue_work_on():在指定CPU上添加工作任務(wù),queue_work()調(diào)用queue_work_on()在所有CPU上添加工作任務(wù)

三、接口使用舉例

1、共享工作隊(duì)列

文件:drivers/gpu/drm/drm_fb_helper.c,舉例如下:

## 3、工作任務(wù)的具體實(shí)現(xiàn)static void drm_fb_helper_restore_work_fn(struct work_struct *ignored){    ...}## 1、定義工作任務(wù),名稱(chēng):drm_fb_helper_restore_work,實(shí)現(xiàn)函數(shù):drm_fb_helper_restore_work_fnstatic DECLARE_WORK(drm_fb_helper_restore_work, drm_fb_helper_restore_work_fn);static void drm_fb_helper_sysrq(int dummy1){        ## 2、將drm_fb_helper_restore_work加入到全局工作隊(duì)列        schedule_work(&drm_fb_helper_restore_work);}

其它接口使用方法類(lèi)似。

2、自定義工作隊(duì)列

文件:drivers/input/touchscreen/gt9xx/gt9xx.c

## 1.定義工作任務(wù)和工作隊(duì)列static struct delayed_work gtp_esd_check_work;static struct workqueue_struct * gtp_esd_check_workqueue = NULL;static int goodix_ts_init(void){    ...    ## 2.初始化工作任務(wù)gtp_esd_check_work; 創(chuàng)建工作隊(duì)列g(shù)tp_esd_check_workqueue    INIT_DELAYED_WORK(>p_esd_check_work, gtp_esd_check_func);    gtp_esd_check_workqueue = create_workqueue("gtp_esd_check");    ...}## 3.工作任務(wù)gtp_esd_check_work的實(shí)現(xiàn)函數(shù)static void gtp_esd_check_func(struct work_struct *work){    ...}void gtp_esd_switch(struct i2c_client *client, s32 on){    ...    ## 4.將工作任務(wù)gtp_esd_check_work添加到工作隊(duì)列g(shù)tp_esd_check_workqueue,延時(shí)調(diào)度    queue_delayed_work(gtp_esd_check_workqueue, >p_esd_check_work, ts->clk_tick_cnt);    ...    ## 5.等待延時(shí)任務(wù)完成    cancel_delayed_work_sync(>p_esd_check_work);    ...}static int goodix_ts_remove(struct i2c_client *client){    ...    ## 6.銷(xiāo)毀工作隊(duì)列g(shù)tp_esd_check_workqueue    destroy_workqueue(gtp_esd_check_workqueue);    ...}

注:工作隊(duì)列允許任務(wù)重新調(diào)度和睡眠。

看完上述內(nèi)容,你們對(duì)Linux內(nèi)核工作隊(duì)列是什么有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


分享標(biāo)題:Linux內(nèi)核工作隊(duì)列是什么
網(wǎng)站路徑:http://www.dlmjj.cn/article/ghgeee.html