語言實現一種建立易管理易維護執行緒的方法

2021-08-26 05:48:22 字數 3327 閱讀 1833

在乙個程式中的多個執行路線就叫做執行緒。

就個人理解而言,乙個執行緒就是乙個程序裡的乙個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 迭代過程。程式實現主要有三個步驟 步驟一 各種引數初始化 步驟二 單個粒子歷史最優經驗 步驟...