linux c 執行緒建立的封裝

2021-06-18 04:25:48 字數 1488 閱讀 2131

class clthread

;#include #include "clthread.h"

#include "cllog.h"

using namespace std;

clthread::clthread()

clthread::~clthread()

clstatus clthread::run(void *pcontext)

return clstatus(0, 0);

}clstatus clthread::waitfordeath()

return clstatus(0, 0);

}void* clthread::startfunctionofthread(void *pthis)

clstatus clthread::runthreadfunction()

問題:

為什麼使用

static

函式?是因為在run方法中pthread_create的第三個引數服務

m_pcontext = pcontext;

int r = pthread_create(&m_threadid, 0, startfunctionofthread, this);

為什麼需要傳遞

this

指標?用來呼叫特定物件的runthreadfunction()方法

startfunctionofthread

是private

的,為什麼能夠被呼叫?

非靜態方法可以呼叫靜態方法

能否封裝變化點?

一:物件導向的封裝

class clthread

;

這裡講runthreadfunction降為子類中實現了。

二:基於模板的物件導向的封裝

這裡講runthreadfunction降為子類中實現了。

templateclass clthread

~clthread(){}

clstatus run(void *pcontext = 0)

return clstatus(0, 0);

} clstatus waitfordeath()

return clstatus(0, 0);

}private:

static void* startfunctionofthread(void *pcontext)

clstatus runthreadfunction()

protected:

void *m_pcontext;

pthread_t m_threadid;

};

呼叫時

class clmythread : public clthread

};int main()

這裡用到了基於模板的靜態多型。

linux C執行緒雜記

以前學作業系統的程序和執行緒管理時,經常聽到互斥加鎖解鎖之類的概念,但是幾乎很少在程式設計中用到,今天看 gnu linux程式設計 的執行緒這章時,對c程式中如何給變數加鎖解鎖有了乙個大致的了解,現記錄如下 互斥其實是保證執行緒在關鍵區正常執行的變數,同一時刻只能由某一程序訪問,要建立乙個關鍵區,...

Linux c 執行緒入門

include include include include include void print msg1 void void print msg2 void void thread create pthread t thread 2 int main void print msg1 int f...

Linux C程序 執行緒

1 程序間通訊 庫 在使用者空間是不可能實現程序通訊,可通過linux核心建立物件來通訊 pid t pid 程序號的型別定義 pid fork 建立程序 if pid 0 子程序 if pid 1 父程序 2 執行緒間通訊 庫 在使用者空間可以實現執行緒間通訊,通過全域性變數通訊 pthread ...