*並行開發(加速遊戲)
處理器製造商有用他們的cpu在每秒。這看起來是模型cpu在桌面電腦,台式以及手機,cpu將要超過2.5ghz。cpu將要有yue來yue多的表現。在本章我們將要展示如何創造乙個執行緒來執行這個方法game::rungame.這將要意味著主要的遊戲迴圈將要執行在它自己本身的執行執行緒並且我們的主要功能是執行其他任務。現在展示如何建立乙個遊戲執行緒。
#include "gameloop.h"
#include
void rungamethread(game &game)
int main(int argc,_tchar* argv)
);assert(gamethread.joinable());
while( !game.hashfinished() )
gamethread.join();
delete serializationmanager::getsingletonptr();
return 0;
}這段**將要崩潰因為這個game::hasfinished方法將要重複被呼叫。他將要可持續性的在主線程和遊戲執行緒之間將要獲取變數在相同的時間裡。
bool hasfinished() const
遊戲類將要嘗試寫這個m_playerwon變數在每次迴圈。甚至這個主線程將要嘗試讀這個m_playerwon變數在相同的時間裡作為遊戲執行緒來寫它並且這個程式將要被關閉。你要處理
這些問題通過胡吃。c++提供這個mutex類來鎖定這個多執行緒執行通過這個共享的變數。
std::mutex m_mutex;
std::unique_lockm_finishedquerylock;
我們有兩個mutex,mutex他本身和unique_lock模板,他們將要提供方便的mutex方式。unique_lock建構函式構造乙個mutex物件作為主要引數。這個mutex行為。這個第二個引數是
可選擇的;如果它沒有被申請,那麼unique_lock將要獲得乙個鎖早mutex立即的通過defer_lock我們能夠表現出來。這個try_lock方式是lock非鎖形式。這個方法將要返回true如果鎖獲得或者如果鎖不能獲得為false。現在你將要看到建立乙個lock,我們能像你展示如何用這個unique_lock模板來防止你的text造成崩潰。用這個lock將要保護這個m_playerquit
以及m_playerwon變數在hasfinished方法中。
bool hasfinished() const
hasfinished方法將要呼叫這個lock方法在m_finishedquertlock它將要計算這個數值並且儲存在hasfinished變數中。這個鎖將要釋放返回這個狀態通過這個方式並且允許等待乙個執行緒用來鎖這個mutex。
這僅僅是第一步能夠保護我們的程式避免崩潰。這個hasfinished方法呼叫這個主線程但是這個m_playerwon和m_playerquit變數用來寫這個game執行緒。我們來增加三個新的方法來保護這執行緒的變數。
void setplayerquit()
void setplayerwon()
bool getplayerwon()
這也以為著我們將要要求更新game::onquit方法來展示。
void game::onquit()
這個遊戲game::onquit方法現在呼叫這個setplayerquit方法,用這個m_finishedquerylock來保護這個變數。這個rungame需要更新用這個setplayerwon以及getplaywon方法。
void game::rungame()
if (playerwon)
}if (getplayerwon())
}
C 並行開發Pthread之執行緒(一)
執行緒物件 pthread t 狀態 可執行 執行 停止 休眠 阻塞 pthread 庫可用於建立 維護和管理多執行緒和應用程式中的執行緒。1.建立執行緒 int pthread create pthread t restrict thread,const pthread attr t restri...
C 多執行緒開發之任務並行庫詳解
目錄 之前學習了執行緒池,知道了它有很多好處。使mvsaevt用執行緒池可以使我們在減少並行度花銷時節省作業系統資源。可認為執行緒池是乙個抽象層,其向程式設計師隱藏了使用執行緒的細節,使我們可以專心處理程式邏輯,而不是各種執行緒問題。但也不是說我們所有的專案中都上線程池,其實它也有很多弊端,比如我們...
多核並行開發
在科學與工程計算 大型資料庫 監控中心等領域,效能需求高於程式設計代價,早在單核 時代,就已經廣泛採用單主機上的多cpu,乃至多主機集群的結構,自然也很早就開始使 用並行程式 有單程序多執行緒的並行,有單機多程序的並行,還有多機多程序的並行。即使是使用多主機集群 cluster 結構的場合,往往也歡...