97国产精品一区二区视频_国产午夜毛片色哟哟_惠民福利国产91精品看黄网站在线观看_搡老熟女老女人一区二区三区_国产做a∨在线视频观看免费_日韩 综合 婷婷 图_成人黄色一级毛片片_萧山本地第一网络媒体_亚洲国产精品无码久久久曰_亚洲欧美日韩岛国色图

快捷導航

探討C語言系統(tǒng)編程中線程的原理以及實現(xiàn)

2024-11-13 10:17| 發(fā)布者: admin| 查看: 86| 評論: 0
摘要: 點擊藍字 關注我們線程的概念我們今天來聊一聊線程,之前有寫過一篇關于進程的文章,今天我們聊的線程,和進程差不多,我們首先要知道的一件事情是一個進程里面可以包括多個線程,不能反過來,我們之前了解到的不同 ...

點擊藍字 關注我們

線程的概念

我們今天來聊一聊線程,之前有寫過一篇關于進程的文章,今天我們聊的線程,和進程差不多,我們首先要知道的一件事情是一個進程里面可以包括多個線程,不能反過來,我們之前了解到的不同進程可以做不一樣的事情,我們舉一個簡單易懂的例子:我們的電腦上面有很多的應用程序,微信、QQ,酷狗音樂等等,我們運行一個應用程序就有一個進程,那什么是線程呢?比如其中一個,我們打開了酷狗音樂,打開音樂聽著,這時候你覺得歌好聽你就去看評論,這時候你想一下:播放音樂,看評論。是兩件事情,但是都可以同時進行,那這里我們說酷狗音樂是一個進程,聽音樂和看評論是它下面的兩個線程。

你要記住單進程里面執(zhí)行多個任務,這就是線程。

線程原理圖


探討C語言系統(tǒng)編程中線程的原理以及實現(xiàn)

線程的標識

我們之前說的進程有一個唯一的標識,我們今天說的線程也是一樣的我們的進程標識是pit_t數(shù)據(jù)類型來表示,我們的線程是用pthread_t數(shù)據(jù)類型來表示。獲取自己的線程標識我們用函數(shù)pthread_self();

線程創(chuàng)建

在外面沒有創(chuàng)建新的線程的時候,運行的時候他和普通進程沒沒有什么區(qū)別。我們創(chuàng)建出來的線程是共享全部變量在子線程改變?nèi)肿兞磕敲粗骶€程也會被改變,這一點一會我們可以驗證一下。

創(chuàng)建新線程可以使用函數(shù)pthread_create()來創(chuàng)建,我們來看看看書的主要參數(shù):

參數(shù)1:pthread_t *tid

傳出參數(shù),表示新創(chuàng)建的子線程ID。

參數(shù)2:const pthread_attr_t *attr

線程屬性,傳入NULL表示使用默認屬性

參數(shù)3:void *(*start_rountn)(void *)

子線程的回調(diào)函數(shù),創(chuàng)建成功,pthread_create函數(shù)返回時,該函數(shù)會被自動調(diào)用;

參數(shù)4:void *arg

給回調(diào)函數(shù)傳的參數(shù),如果函數(shù)不需要傳參傳NULL.


探討C語言系統(tǒng)編程中線程的原理以及實現(xiàn)

代碼實現(xiàn)

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<pthread.h>int a=10;void * fun1(void * arg){   pthread_detach(pthread_self());a=100;printf("子線程    進程號:%d,  線程號:%lu\n",getpid(),pthread_self());}int  main (){pthread_t tid;printf("主線程    進程號:%d,  線程號:%lu\n",getpid(),pthread_self());//創(chuàng)建線程printf("a=%d\n",a);int ret =pthread_create(&tid,NULL,fun1,NULL);if(ret==0){printf("線程創(chuàng)建成功!\n");}sleep(2);printf("a=%d\n",a);return 0;}

我們看一下下面程序執(zhí)行的結果,我們可以看出來兩個進程號是一樣的,但是線程號卻不一樣。


探討C語言系統(tǒng)編程中線程的原理以及實現(xiàn)

另外一個值得我們注意的是我們的全局變量a我們在定義的時候值是10,然后我們在線程里面把值改為了100,最后打印出來的結果驗證了我們前面說的線程是共享全局變量的。

線程與進程


探討C語言系統(tǒng)編程中線程的原理以及實現(xiàn)

線程分離

int pthread_detach(pthread_t thread); 設置線程分離,使用detach分離線程,分離后的線程會自動回收。

參數(shù): thread 是要分離的線程ID。

成功返回0,失敗返回errno。

線程退出

pthread_exit 退出

void pthread_exit(void *retval); 退出當前線程。

retval:退出值。 無退出值時,NULL

exit(); 退出當前進程。

return: 返回到調(diào)用者那里去。pthread_exit(): 退出當前線程。

結語

關于線程的使用不僅于此,在線程編程中還有很多重要的知識,后期再更新對線程更深入地探討。


鮮花

握手

雷人

路過

雞蛋

關注我們:東遠物聯(lián)

抖音

微信咨詢

咨詢電話:

199-2833-9866

D-Think | 廣州東遠智能科技有限公司

地址:廣州市白云區(qū)北太路1633號廣州民營科技園科創(chuàng)中心2棟16樓

電話:+86 020-87227952 Email:[email protected]

Copyright  ©2020  東遠科技  粵ICP備2024254589號

免責申明:部分圖文表述來自于網(wǎng)絡,如有侵權請聯(lián)系作者刪除!