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...