Linux+c+线程的属性,C ++中的多线程
多線程是多任務(wù)的一種特殊形式,多任務(wù)是一種功能,它使您的計算機可以同時運行兩個或多個程序。通常,多任務(wù)有兩種類型:基于進(jìn)程和基于線程。
基于進(jìn)程的多任務(wù)處理程序的并發(fā)執(zhí)行。基于線程的多任務(wù)處理并發(fā)執(zhí)行同一程序的各個部分。
多線程程序包含兩個或多個可以同時運行的部分。這種程序的每個部分都稱為一個線程,并且每個線程都定義了單獨的執(zhí)行路徑。
C ++不包含對多線程應(yīng)用程序的任何內(nèi)置支持。相反,它完全依賴于操作系統(tǒng)來提供此功能。
本教程假定您正在Linux OS上工作,并且我們將使用POSIX編寫多線程C ++程序。POSIX線程或Pthread提供了許多類似Unix的POSIX系統(tǒng)(例如FreeBSD,NetBSD,GNU / Linux,Mac OS X和Solaris)上可用的API。
以下例程用于創(chuàng)建POSIX線程-#include?
pthread_create?(thread,?attr,?start_routine,?arg)
在這里,pthread_create創(chuàng)建一個新線程并使其可執(zhí)行。可以在代碼中的任何位置多次調(diào)用此例程。這是參數(shù)的說明。參數(shù)描述線子例程返回的新線程的不透明唯一標(biāo)識符。
屬性一個不透明的屬性對象,可用于設(shè)置線程屬性。您可以指定線程屬性對象,或?qū)ULL指定為默認(rèn)值。
start_routine創(chuàng)建線程后將執(zhí)行的C ++例程
精氨酸可以傳遞給start_routine的單個參數(shù)。它必須通過引用作為void類型的指針轉(zhuǎn)換傳遞。如果不傳遞任何參數(shù),則可以使用NULL。
進(jìn)程可以創(chuàng)建的最大線程數(shù)取決于實現(xiàn)。一旦創(chuàng)建,線程就是對等的,并且可以創(chuàng)建其他線程。線程之間沒有隱含的層次結(jié)構(gòu)或依賴性。
終止線程
我們使用以下例程來終止POSIX線程–#include?
pthread_exit?(status)
在這里,pthread_exit用于顯式退出線程。通常,pthread_exit()例程在線程完成其工作之后被調(diào)用,并且不再需要存在。
如果main()在創(chuàng)建線程之前完成,并以pthread_exit()退出,則其他線程將繼續(xù)執(zhí)行。否則,它們將在main()完成時自動終止。
示例#include?
#include?
#include?
using?namespace?std;
#define?NUM_THREADS?5
void?*PrintHello(void?*threadid)?{
long?tid;
tid?=?(long)threadid;
cout?<
pthread_exit(NULL);
}
int?main?()?{
pthread_t?threads[NUM_THREADS];
int?rc;
int?i;
for(?i?=?0;?i?
cout?<
rc?=?pthread_create(&threads[i],?NULL,?PrintHello,?(void?*)i);
if?(rc)?{
cout?<
exit(-1);
}
}
pthread_exit(NULL);
}
輸出結(jié)果$gcc?test.cpp?-lpthread
$./a.out
main()?:?creating?thread,?0
main()?:?creating?thread,?1
main()?:?creating?thread,?2
main()?:?creating?thread,?3
main()?:?creating?thread,?4
Hello?World!?Thread?ID,?0
Hello?World!?Thread?ID,?1
Hello?World!?Thread?ID,?2
Hello?World!?Thread?ID,?3
Hello?World!?Thread?ID,?4
總結(jié)
以上是生活随笔為你收集整理的Linux+c+线程的属性,C ++中的多线程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CBOW模型的数据预处理
- 下一篇: 蓝桥杯基础练习1-15(python)