本文主要介紹c多線程安全問題(c多線程處理),下面一起看看c多線程安全問題(c多線程處理)相關(guān)資訊。
鎖定的關(guān)鍵區(qū)域應(yīng)該盡可能緊湊和小。
問題分析:
當(dāng)一個(gè)線程在臨界區(qū)執(zhí)行時(shí),其他所有試圖進(jìn)入臨界區(qū)的線程都會被阻塞,所以我們要保證臨界區(qū)盡可能小。舉個(gè)例子,
void callhome(字符串消息){ std:: lock _ guardstd::mercex lock(mu);//臨界段開始-保護(hù)std:: cout readfifthousandrecords;cout 線程和this _ thread:: get _ id 說 消息endl}// lock_guard對象被銷毀,互斥mu被釋放
readfifythousandrecords方法是一個(gè)只讀操作,如果它從一個(gè)數(shù)據(jù)庫中花費(fèi)了10秒鐘,就沒有理由在鎖中執(zhí)行它。
如果讀取5萬條記錄,其他所有線程都會被這個(gè)不必要的時(shí)間阻塞。會嚴(yán)重影響程序的執(zhí)行效率。
正確的做法應(yīng)該是只把std : : cout放入臨界區(qū),比如
void callhome(字符串消息){ readfifythosandrecords;//唐 不需要在臨界區(qū),因?yàn)樗?s一個(gè)只讀操作std:: lock _ guardstd::mercex lock(mu);//臨界區(qū)開始-保護(hù)std:: cout cout 線程和this_thr::get _ id 說 消息endl}// lock_guard對象被銷毀,互斥mu被釋放
標(biāo)簽:
關(guān)鍵線程
了解更多c多線程安全問題(c多線程處理)相關(guān)內(nèi)容請關(guān)注本站點(diǎn)。