3 回答

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
GCC附帶了一個(gè)編譯器運(yùn)行時(shí)庫(kù)(libgcc),用于(除其他外)它以其支持的語(yǔ)言為多線程相關(guān)功能提供了低級(jí)的OS抽象。最相關(guān)的示例是libstdc ++的C ++ 11 <thread>
,<mutex>
和<future>
,當(dāng)使用內(nèi)部Win32線程模型構(gòu)建GCC時(shí),它們沒(méi)有完整的實(shí)現(xiàn)。MinGW-w64提供了一個(gè)winpthreads(在Win32多線程API之上的pthreads實(shí)現(xiàn)),GCC可以將其鏈接以啟用所有高級(jí)功能。
我必須強(qiáng)調(diào),這個(gè)選項(xiàng)并不禁止你寫(xiě)你想要的任何代碼(它絕對(duì)NO什么API,你可以在你的代碼中調(diào)用影響)。它僅反映GCC的運(yùn)行時(shí)庫(kù)(libgcc / libstdc ++ / ...)使用的功能。@James引用的警告與GCC的內(nèi)部線程模型無(wú)關(guān),而與Microsoft的CRT實(shí)現(xiàn)無(wú)關(guān)。
總結(jié)一下:
posix
:?jiǎn)⒂肅 ++ 11 / C11多線程功能。使libgcc依賴libwinpthreads,以便即使您不直接調(diào)用pthreads API,也將分發(fā)winpthreads DLL。與您的應(yīng)用程序一起分發(fā)一個(gè)DLL沒(méi)有錯(cuò)。win32
:沒(méi)有C ++ 11多線程功能。
都不會(huì)影響任何調(diào)用Win32 API或pthreads API的用戶代碼。您可以同時(shí)使用兩者。

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
GCC運(yùn)行時(shí)的某些部分(尤其是異常處理)取決于所使用的線程模型。因此,如果您使用的是由POSIX線程構(gòu)建的運(yùn)行時(shí)版本,但決定使用Win32 API在自己的代碼中創(chuàng)建線程,則可能會(huì)遇到問(wèn)題。
即使您使用運(yùn)行時(shí)的Win32線程版本,您也可能不應(yīng)該直接調(diào)用Win32 API。引用MinGW常見(jiàn)問(wèn)題解答:
由于MinGW使用Windows附帶的標(biāo)準(zhǔn)Microsoft C運(yùn)行時(shí)庫(kù),因此應(yīng)小心并使用正確的函數(shù)來(lái)生成新線程。特別是,該CreateThread函數(shù)將無(wú)法為C運(yùn)行時(shí)庫(kù)正確設(shè)置堆棧。您應(yīng)該改用_beginthreadex(幾乎)與完全兼容的CreateThread。
- 3 回答
- 0 關(guān)注
- 6367 瀏覽
添加回答
舉報(bào)