日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux的C編程中多線程如何終止某個線程示例與要點

FPGA之家 ? 來源:CSDN技術(shù)社區(qū) ? 作者:老吳的嵌入式之旅 ? 2021-04-27 13:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

示例 demo

最簡單的 demo:

static void* thread1_func(void *arg)

{

int i = 0;

// able to be cancel

pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);

pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);

for(i=0; ; i++) {

printf(“thread1 %d

”, i);

sleep(1);

}

}

int main(int argc, char **argv)

{

pthread_t t;

void *res;

pthread_create(&t, NULL, thread1_func, NULL);

sleep(3);

pthread_cancel(t); // cancel thread1

pthread_join(t, &res); // wait thread1

if (res == PTHREAD_CANCELED

printf(“thread1 was terminate by cancel

”);

else

printf(“thread1 was not terminate by cancel

”);

exit(EXIT_SUCCESS);

}

為了突出重點,省略了檢查返回值。

運行效果:

thread1 0

thread1 1

thread1 2

thread1 was terminate by cancel

主線程先創(chuàng)建線程 thread1,然后睡眠 3 秒后發(fā)出終止 thread1 的請求。

接收到終止請求后,thread1 會在合適的時機被終止掉。

主線程通過 pthread_join() 阻塞等待 thread1 退出。

幾個要點

線程終止的 4 種方式:

線程的執(zhí)行函數(shù)返回了,這和 main() 函數(shù)結(jié)束類似。

線程調(diào)用了 pthread_exit() 函數(shù),這和調(diào)用 exit() 返回類似。

線程被另一個線程通過 pthread_cancel() 函數(shù)取消,這和通過kill() 發(fā)送 SIGKILL 信號類似。

進(jìn)程終止了,則進(jìn)程中的所有線程也會終止。

取消某個線程的常規(guī)步驟

被取消的線程:

允許取消,pthread_setcancelstate(),參數(shù)可選值:

PTHREAD_CANCEL_ENABLE,這是默認(rèn)值;

PTHREAD_CANCEL_DISABLE;

設(shè)置取消類型,pthread_setcanceltype(),參數(shù)可選值:

PTHREAD_CANCEL_ASYNCHRONOUS,異步方式,當(dāng)發(fā)出取消請求后,線程可能會在任何點被殺死。

PTHREAD_CANCEL_DEFERRED,延遲方式,線程只會在特定的取消點(cancellation points,調(diào)用某個函數(shù)前)被殺死。

發(fā)起取消的線程:

發(fā)送取消要求,pthread_cancel(),發(fā)出取消請求后,pthread_cancel() 當(dāng)即返回,不會等待目標(biāo)線程的退出。

等待取消完成,pthread_join()。

哪些函數(shù)是取消點?

POSIX.1 指定了哪些函數(shù)一定是取消點:

6db9b9f8-a67e-11eb-aece-12bb97331649.png

更多關(guān)于取消點的介紹:

$ man 7 pthreads

Cancellation points

。..

accept()

aio_suspend()

clock_nanosleep()

close()

。..

閱讀開源軟件 MJPG-streamer

MJPG-streamer 是什么?

簡單地說,就是一個開源的流媒體服務(wù)器:

https://github.com/jacksonliam/mjpg-streamer

通過 mjpg-streamer,你可以通過 PC 瀏覽器訪問到板子上的攝像頭圖像。

MJPG-streamer 是如何結(jié)束工作線程的?

MJPG-streamer 運行時一般會有 3 個線程:

主線程;

負(fù)責(zé)數(shù)據(jù)的輸入的線程 (例如 camera capture thread);

負(fù)責(zé)輸出數(shù)據(jù)的線程 (例如 http server thread)。

以 http server thread 為例:

plugins/output_http/httpd.c

void *server_thread(void *arg)

{

。..

pthread_cleanup_push(server_cleanup, pcontext);

// 處理連接

while(!pglobal-》stop) {

。..

}

pthread_cleanup_pop(1);

}

pthread_cleanup_push() 用于注冊清理函數(shù)到棧中,當(dāng)線程遭取消時,會沿該棧自頂向下依次執(zhí)行清理函數(shù)。

當(dāng)用戶通過按下 ctrl + c 要求結(jié)束程序時,主線程會要求殺掉 http server thread 等各種線程:

static void signal_handler(int sig)

{

for(i = 0; i 《 global.outcnt; i++) {

。..

pthread_cancel(servers[id].threadID);

。..

}

}

接下來,當(dāng) http server thread 遇到某個取消點時,server_cleanup() 會被調(diào)用以完成清理工作。

這里只是簡單地分析一下,MJPG-Streamer 里多線程相關(guān)的代碼挺復(fù)雜的,有興趣的小伙伴們自行閱讀吧。
編輯:lyn

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11822

    瀏覽量

    219602
  • 多線程
    +關(guān)注

    關(guān)注

    0

    文章

    279

    瀏覽量

    21133
  • c編程
    +關(guān)注

    關(guān)注

    0

    文章

    95

    瀏覽量

    29875

原文標(biāo)題:Linux-C編程 / 多線程 / 如何終止某個線程?

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    逆風(fēng)C++QT中控臺逆向課程

    https://www.bilibili.com/opus/1178756596191199237 QT控逆向:多線程邏輯與消息處理分析 在軟件逆向工程領(lǐng)域,QT框架因其跨平臺特性和豐富的功能模塊
    的頭像 發(fā)表于 04-27 10:06 ?74次閱讀

    Java并發(fā)編程的“基石”——多線程概念初識

    。Java 的內(nèi)存可見性機制(如 happens-before 原則)能夠確保在極端并發(fā)下,任何一個調(diào)度節(jié)點看到的集群狀態(tài)都是一致且準(zhǔn)確的,從根本上杜絕了“腦裂”和資源超賣。 其次是 精妙的多線程協(xié)同
    發(fā)表于 04-16 18:50

    摩爾線程正式開源TileLang-MUSA項目

    近日,摩爾線程正式開源TileLang-MUSA項目,實現(xiàn)對TileLang編程語言的完整支持。該項目已成功在摩爾線程多代全功能GPU上完成功能驗證與特性開發(fā),旨在通過高層抽象與編譯器優(yōu)化,大幅降低開發(fā)門檻,為國產(chǎn)算力平臺提供更
    的頭像 發(fā)表于 02-11 16:57 ?1731次閱讀

    【瑞薩RA × Zephyr評測】多線程和看門狗

    本文章旨在評估使用 Zephyr RTOS 在 Renesas FPB-RA6E2 開發(fā)板上實現(xiàn)多線程調(diào)度與硬件看門狗功能的應(yīng)用。評估內(nèi)容包括任務(wù)調(diào)度、看門狗初始化流程、主程序邏輯的詳細(xì)解析,以及實驗現(xiàn)象與數(shù)據(jù)分析。
    的頭像 發(fā)表于 01-10 10:23 ?2680次閱讀
    【瑞薩RA × Zephyr評測】<b class='flag-5'>多線程</b>和看門狗

    解析Linux的進(jìn)程、線程和協(xié)程

    系統(tǒng)的穩(wěn)定性和安全性。 (3)創(chuàng)建與銷毀:Linux使用fork()系統(tǒng)調(diào)用來創(chuàng)建新進(jìn)程,通過exit()來終止進(jìn)程。 線程(Thread) 線程是進(jìn)程內(nèi)的執(zhí)行單元,多個
    發(fā)表于 12-22 11:00

    多線程的系統(tǒng)

    多線程系統(tǒng)的事件響應(yīng)也是在中斷完成的,但事件的處理是在線程完成的。在多線程系統(tǒng),
    發(fā)表于 12-08 07:55

    Linux多線程對比單線程的優(yōu)勢

    Linux系統(tǒng),線程是操作系統(tǒng)能夠進(jìn)行運算調(diào)度的最小單位。線程被包含在進(jìn)程之中,是進(jìn)程的實際運行單位。一個進(jìn)程可以擁有多個
    發(fā)表于 12-01 06:11

    rt-thread studio 如何進(jìn)行多線程編譯?

    ,使用的是5800h+32g內(nèi)存+sn550 ssd,開啟16線程編譯時cpu的占用率也只能到30%,編譯完整個工程需要3分鐘 感覺多線程編譯設(shè)置沒有生效,有辦法提高編譯速度嗎 rtthread studio版本是 2.2.9
    發(fā)表于 10-11 09:16

    rtth studionano 如何創(chuàng)建動態(tài)線程?

    有沒有大佬,可以說一下為什么靜態(tài)線程可以正常使用,動態(tài)線程怎么也使用不了。 具體需要什么配置才能使用動態(tài)線程創(chuàng)建。謝謝!
    發(fā)表于 09-11 06:01

    【HZ-T536開發(fā)板免費體驗】—— linux創(chuàng)建線程

    自己的私有資源。 在linux系統(tǒng),線程狀態(tài)通常反映了當(dāng)前線程的當(dāng)前活動和執(zhí)行階段。 主要分為: 1。運行轉(zhuǎn)態(tài) 2。阻塞轉(zhuǎn)態(tài) 3。終止
    發(fā)表于 09-01 21:31

    rtt studionano 如何創(chuàng)建動態(tài)線程?

    有沒有大佬,可以說一下為什么靜態(tài)線程可以正常使用,動態(tài)線程怎么也使用不了。 具體需要什么配置才能使用動態(tài)線程創(chuàng)建。謝謝!
    發(fā)表于 08-22 06:19

    UVC+MSC實現(xiàn)MSC線程未運行的原因?

    我正在嘗試使用 EZUSB 運行 UVC + MSC。我有以下內(nèi)容。但看起來只有 UVC 線程在運行,而 MSC 沒有運行。fw 不響應(yīng) MSC 命令。我確保 LPM 已被禁用,只是為了檢查傳感器
    發(fā)表于 07-16 07:08

    多線程的安全注意事項

    多線程安全是指多個線程同時訪問或修改共享資源時,能夠保證程序的正確性和可靠性。 開發(fā)者選擇TaskPool或Worker進(jìn)行多線程開發(fā)時,在TaskPool和Worker的工作線程中導(dǎo)
    發(fā)表于 06-20 07:49

    鴻蒙5開發(fā)寶藏案例分享---跨線程性能優(yōu)化指南

    ;>Worker</span>做多線程開發(fā)時,總遇到對象跨線程卡頓的問題,原來鴻蒙早就提供了解決方案。下面結(jié)合代碼和實戰(zhàn)案例,帶你徹底玩轉(zhuǎn)性能優(yōu)化! 一、痛點:跨線程
    發(fā)表于 06-12 17:13

    工控一體機多線程任務(wù)調(diào)度優(yōu)化:聚徽分享破解工業(yè)復(fù)雜流程高效協(xié)同密碼

    在當(dāng)今工業(yè) 4.0 的浪潮下,工業(yè)生產(chǎn)正朝著高度自動化、智能化的方向大步邁進(jìn)。生產(chǎn)流程日益復(fù)雜,眾多任務(wù)需要同時、高效地協(xié)同執(zhí)行,這對工業(yè)控制系統(tǒng)的核心 —— 工控一體機提出了前所未有的挑戰(zhàn)。多線程
    的頭像 發(fā)表于 05-28 14:06 ?755次閱讀
    衡阳市| 会昌县| 桂平市| 长治市| 白银市| 安乡县| 遵化市| 石首市| 平利县| 镶黄旗| 乐安县| 巩留县| 当涂县| 雅江县| 靖安县| 宣汉县| 梁平县| 眉山市| 遂昌县| 于田县| 广州市| 抚松县| 林口县| 耒阳市| 叙永县| 枣阳市| 志丹县| 望都县| 永福县| 富民县| 越西县| 绥中县| 周至县| 福州市| 民县| 滦南县| 申扎县| 金阳县| 泸溪县| 托克逊县| 台北市|