C 11中多執行緒例子

2021-07-10 21:40:22 字數 1241 閱讀 6196

c++11開始自帶執行緒相關的操作庫。這裡舉個例子,以併發程式設計最經典的例子,生產者消費者的例子來示例在c++11使用標準庫提供的執行緒庫來進行併發程式設計。

這裡為了方便執行緒的使用,參考了android原始碼中對pthread的封裝。

class thread

virtual ~thread()

}thread(const thread&) = delete;

thread& operator=(const thread&) = delete;

virtual

bool threadrun() = 0;

bool start()

else

return m_running;

}bool stop()

private:

void runimpl()

std::shared_ptr

m_thread;

std::atomic_bool m_running;

};

對其進行了簡單的封裝,如果需要使用執行緒,繼承thread和實現threadrun這個介面,如果其返回true,那麼執行緒將重複呼叫這個介面,如果其返回為false,那麼執行緒將退出執行。

生產者

class producethread : public thread

bool threadrun()

private:

std::queue

& m_q;

std::condition_variable& m_cv;

std::mutex& m_mutex;

};

消費者

class consumerthread : public thread

bool threadrun()

else

return

true;

}private:

std::queue

& m_q;

std::condition_variable& m_cv;

std::mutex& m_mutex;

};

這裡使用了condition_variable來進行執行緒間的同步。

int main(int argc, char *argv)

C 11中多執行緒

std lock guard是raii模板類的簡單實現,功能簡單。std lock guard 在建構函式中進行加鎖,析構函式中進行解鎖。鎖在多執行緒程式設計中,使用較多,因此c 11提供了lock guard模板類 在實際程式設計中,我們也可以根據自己的場景編寫resource guardraii...

C 11 多執行緒

新特性之描述 雖然 c 11 會在語言的定義上提供乙個記憶體模型以支援執行緒,但執行緒的使用主要將以 c 11 標準庫的方式呈現。c 11 標準庫會提供型別 thread std thread 若要執行乙個執行緒,可以建立乙個型別 thread 的實體,其初始引數為乙個函式物件,以及該函式物件所需要...

c 11 多執行緒

1.多執行緒的原理 同一時間內,cpu只能處理1條執行緒,只有1條執行緒在工作 執行 多執行緒併發 同時 執行,其實是cpu快速地在多條執行緒之間排程 切換 如果cpu排程執行緒的時間足夠快,就造成了多執行緒併發執行的假象。思考 如果執行緒非常非常多,會發生什麼情況?cpu會在n多執行緒之間排程,c...