在乙個程式中的多個執行路線就叫做執行緒。
就個人理解而言,乙個執行緒就是乙個程序裡的乙個while(1)
,一般情況下執行緒是不會退出的。
而多執行緒自然就是乙個程序裡的多個while(1)
了。
《西遊記》中,有一種有趣的設定——「天上一天,地上一年」。
而在現實世界中,隨著技術發展,cpu的效能越來越高,誇張點說:「cpu一年,地上一天」。
為了高效利用cpu效能,多程序的方式豐富了作業系統,無論是windows還是linux系統,程式都是「輪班」跑的,放慢些看,就是這個執行一會兒,然後讓出cpu,其他程式再執行一會兒,然而我們看起來就是同時執行的。
多執行緒也是這樣的。
linux系統下的多執行緒遵循posix執行緒介面,稱為pthread。編寫linux下的多執行緒程式,需要使用標頭檔案pthread.h,在編譯時注意加上-lpthread引數,以呼叫靜態鏈結庫;pthread並非linux系統的預設庫
#include
#include
void *threadfun(void *arg)
int main(void)
pthread_join(id,null);
return (0);
}
補充:
printf("current thread id:%u\n", (unsigned int)pthread_self());
可列印出當前執行緒id。
檔案均為為給力同事所傳。為防丟失忘記,因此記錄於此。
在工程中加入下面的c檔案和h檔案。
包頭檔案,然後這樣建立:
static
int port = 14000;
printf("current thread id:%u\n", (unsigned
int)pthread_self());
threadcreateparadef tthreadcreatepara;
memset(&tthreadcreatepara, 0, sizeof(threadcreateparadef));
tthreadcreatepara.ps8name = (char *)"receivejobs";
tthreadcreatepara.pvfuncpara = &port;
tthreadcreatepara.entryfuncpt = gsoapserverthread;
createthread(&tthreadcreatepara);
ps -ef | grep fw_ro*
檢視程序id
top -h -p 16002
檢視程序的執行緒,效果如下圖:
pid為29527的執行緒即為receivejobs
執行緒。
( char *ps8name, /* 任務的名稱 */
int s32priority, /* 實時任務的優先順序 1-99 */
void *(*pventrypt)(void *), /* 任務的函式入口 */
void *pvfuncpara, /* 這是乙個指標值,任務入口函式的入參 */
int s32schedule /*指定fifo 、rr或者normal排程方法*/
) /*判斷優先順序的正確性*/
if (s32priority > 99 || s32priority < 0)
/*初始化執行緒引數*/
pthread_attr_init(&tthreadattr);
/*設定排程策略*/
pthread_attr_getschedpolicy(&tthreadattr, &s32schpolicy);
s32schpolicy = s32schedule; /*建立的所有任務都將是實時任務*/
pthread_attr_setschedpolicy(&tthreadattr, s32schpolicy);
/*設定程序為分離狀態,任務分離後將不需要用pthread_join()等待執行緒退出*/
pthread_attr_setdetachstate(&tthreadattr, pthread_create_detached);
if (sched_fifo == s32schedule || sched_rr == s32schedule)
ret = pthread_create(&tthreadid, &tthreadattr, pventrypt, pvfuncpara);
if(0 != ret)
return tthreadid;
}int createthread(threadcreateparadef *ptthreadcreatepara)
return -1;
}return
0;}
c語言實現kmp演算法,簡化易記版
這種kmp演算法很簡單 也沒有網上的那麼複雜,簡單易懂void creatprefix char pattern,int prefix,intn void moveprefix int prefix,intn void kmp search char text,char pattern,int n,...
一種遊戲機械人的GO語言實現
機械人是進行壓力測試的一把好手,在測試伺服器壓力極限,優化伺服器 測試 覆蓋率等方面有著不可或缺的作用。go語言有著優良便捷的併發特性,只需簡單的烹飪即可搭建起乙個機械人。再加上ai樹的加持,機械人如虎添翼,可快速完成各種業務邏輯,如建立登入流程,打怪流程等流程,只需拖拽子樹即可復用,實為居家必備之...
一種簡單的粒子群演算法(PSO)的R語言實現
粒子群演算法 pso 是一種重要的進化演算法,各種不同的粒子群演算法有是多種之多。r語言是一種被廣泛使用的統計語言,本文首先以r語言來實現乙個最簡單的粒子群演算法,然後再舉乙個例子,說明粒子群演算法 pso 迭代過程。程式實現主要有三個步驟 步驟一 各種引數初始化 步驟二 單個粒子歷史最優經驗 步驟...