1、C++多線程也可以使用UNIX C的庫函數(shù),pthread_mutex_t,pthread_create,pthread_cond_t,pthread_detach,pthread_mutex_lock/unlock,等等。在使用多線程的時候,你需要先創(chuàng)建線程,使用pthread_create,你可以使主線程等待子線程使用pthread_join,也可以使線程分離,使用pthread_detach。線程使用中最大的問題就是同步問題,一般使用生產(chǎn)著消費者模型進行處理,使用條件變量pthread_cond_t,pthread_mutex,pthread_cond_wait來實現(xiàn)。
我們提供的服務有:成都網(wǎng)站設計、網(wǎng)站建設、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、廣陽ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術(shù)的廣陽網(wǎng)站制作公司
2、例程:
//創(chuàng)建5個線程
#include pthread.h
#include stdlib.h
void* work_thread(void* arg)
{
//線程執(zhí)行體
return 0;
}
int main(int argc,char* argv[])
{
int nthread = 5;//創(chuàng)建線程的個數(shù)
pthread_t tid;//聲明一個線程ID的變量;
for(int i=0;inthread;i++)
{
pthread_create(tid,NULL,work_thread,NULL);
}
sleep(60);//睡眠一分鐘,你可以看下線程的運行情況,不然主進程會很快節(jié)結(jié)束了。
}
pthread_create(tid,NULL,work_thread,NULL);//創(chuàng)建線程的函數(shù),第一個參數(shù)返回線程的ID;第二個參數(shù)是線程的屬性,一般都置為NULL;第三個參數(shù)是線程函數(shù),線程在啟動以后,會自動執(zhí)行這個函數(shù);第四個參數(shù)是線程函數(shù)的參數(shù),如果有需要傳遞給線程函數(shù)的參數(shù),可以放在這個位置,可以是基礎類型,如果你有不止一個參數(shù)想傳進線程函數(shù),可以做一個結(jié)構(gòu)體,然后傳入。
同時執(zhí)行,使用線程了
C語言本身沒有提供線程的功能,只能調(diào)用平臺的線程來實現(xiàn)
如果在 WINDOWS 下面,可以參考一下 CreateThread 方法
c語言中一個完整的函數(shù)由函數(shù)首部和函數(shù)體構(gòu)成,而且定義函數(shù)時兩者都是必不可少的。
函數(shù)定義的一般形式如下:
類型標識符
函數(shù)名(形參表列)
//
這是函數(shù)首部
//
以下{
}內(nèi)的是函數(shù)體
{
說明部分
執(zhí)行部分
}
舉例說明如下:
//
定義一個不帶返回值的函數(shù)
//
函數(shù)功能:輸出形參的值
void
fun(int
a,
int
b)
{
printf("%d,
%d\n",
a,
b);
}
//
定義一個帶返回值的函數(shù)
//
函數(shù)功能:返回2個整數(shù)數(shù)的最大值
int
fun(int
a,
int
b)
{
return
ab
?
a
:
b;
}
C語言是順序執(zhí)行的,所以在一臺機器上,是不可能同時執(zhí)行兩個while(1)的。除非你用多線程,將兩個while(1)放在兩個線程里面,是可以達到同時執(zhí)行的效果。但嚴格上來說也并不是同時執(zhí)行的,在同一時刻只會執(zhí)行其中一個。
#include?iostream//?必須的頭文件#include?pthread.h
using?namespace?std;?
#define?NUM_THREADS?2?
//?線程的運行函數(shù)
void*?say_hello(void*?args){
cout??"Hello?Runoob!"??endl;????return?0;
}?
int?main(){
//?定義線程的?id?變量,多個變量使用數(shù)組
pthread_t?tids[NUM_THREADS];????
for(int?i?=?0;?i??NUM_THREADS;?++i)
{
//參數(shù)依次是:創(chuàng)建的線程id,線程參數(shù),調(diào)用的函數(shù),傳入的函數(shù)參數(shù)
int?ret?=?pthread_create(tids[i],?NULL,?say_hello,?NULL);????????
if?(ret?!=?0)
{
cout??"pthread_create?error:?error_code="??ret??endl;????????
}
}
//等各個線程退出后,進程才結(jié)束,否則進程強制結(jié)束了,線程可能還沒反應過來;
pthread_exit(NULL);
}
g++ test.cpp -lpthread -o test.o 編譯
./test.o執(zhí)行