C 多執行緒程式設計

2021-07-03 18:12:01 字數 2153 閱讀 2911

c++的多執行緒不同於c語言的多執行緒,對於我這個從c轉向c++的來說更是覺得很難理解;來新公司的這段時間也是一直在思考這方面的事情,近期一直在檢查程式中死鎖的問題;就總結以下最近對於c++多執行緒程式設計的心得吧。

c++的多執行緒主要體現在兩方面,一方面是對於全域性資料的執行緒同步。我們看下面的例項

首先我們封裝乙個thread類

thread.h 檔案

#ifndef thread_h

#define thread_h

#include class thread

virtual ~thread(){};

private:

thread(const thread&);

static void* threadproc(void*);

pthread_t ntid;

};

thread.cpp 檔案

#include #include "thread.h"

thread::thread()

void* thread::run()

int thread::start()

int thread::stop()

bool thread::join()

void* thread::threadproc(void* a_param)

; virtual void* run();

int setcount(const int n);

int setname(const char* aname);

private:

int mcount;

std::string mname;

};

mythread.cpp

#include #include #include #include "mythread.h"

void* mythread::run()

}int mythread::setcount(const int n)

int mythread::setname(const char* aname)

pthread_mutex_unlock(&mutex); //解鎖

}int mythread::setcount(const int n)

int mythread::setname(const char* aname)

}int mythread::setcount(const int n)

int mythread::setname(const char* aname)

virtual void* run();

int setcount(const int n);

int setname(const char* aname);

private:

int mcount;

std::string mname;

pthread_mutex_t mutex;

};

mythread.cpp檔案

#include #include #include #include "mythread.h"

void* mythread::run()

pthread_mutex_unlock(&mutex);

}int mythread::setcount(const int n)

int mythread::setname(const char* aname)

{ std::string astring(aname);

this->mname = astring;

return 0;

main.cpp 檔案

#include #include "mythread.h"

int main()

{ mythread t1(150,"thread 1");

t1.start();

sleep(1);

t1.setcount(12);

t1.start();

return 0;

有興趣的讀者可以看下執行效果,在新增了類內部鎖之後,有效的實現了資料的同步。

歡迎討論。

C 多執行緒程式設計

一 thread 基礎 程序 當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。執行緒 執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式 方...

C 多執行緒程式設計

乙個程序通常定義為程式的乙個例項。在win32中,程序佔據4gb的位址空間。與它們在ms dos和16位windows作業系統中不同,win32程序是沒有活力的。這就是說,乙個win32程序並不執行什麼指令,它只是佔據著4gb的位址空間,此空間中有應用程式exe檔案的 和資料。exe需要的任意dll...

C 多執行緒程式設計

建立執行緒的函式 handle createthread lpsecurity attributes lpthreadattributes,使用預設安全形態,設為null,表明不可被子執行緒繼承 size t dwstacksize,初始棧大小,預設值0表示使用與呼叫該函式的執行緒相同的棧大小 lp...