2013-05-16 43 views
0

我在多線程程序中遇到問題。我的程序有4個線程總是在這裏。 我們將其命名爲這些線程從1到4Pthread_create錯誤11只有5個併發線程

我的計劃的目標是與外圍設備的插座上進行通信。 線程號4用於將消息發送到外設。

每當一個消息被髮送到外圍,我使用:

pthread_create(&m_hThreadMsgReader, NULL, &ThreadMsgReader, (void*) &argStruct);

這將創建一個線程來聽插座上的反應,當插座沒有這個線程將返回如果iRet = recv(m_iSocket, pcRecBuf, DEFAULT_READ_DATA_LEN, 0);使得iRet取值0.

因此,對於當前的實現,在外圍設備(除了通過用戶輸入發送的其他命令之外)進行數據池(每分鐘)。

這裏的問題是,幾個小時後,並行線程創建將錯誤11.我在堆棧溢出看出,這意味着該系統可能沒有足夠的資源或過多線程崩潰。

但我不明白,因爲在QtCreator調試,我只能看到從1到4的線程。我知道我可能已創建像300線程,但線程列表只包含4,這意味着所有其他線程被終止。

所以,我真的不明白,如果線程創建的最大數目是過程的整個生命週期或線程目前在同一時間數中。

我應該找到一種方法,對聽音的單個線程,即使它會聽一個空插座?我的實施是一種不好的模式?

+1

與崩潰「錯誤11」是段錯誤。它可能與任何類型的資源稀缺無關,但你訪問一個你不應該訪問的指針。當然,例如,當內存分配失敗並且不檢查返回的指針時,會發生這種情況。 –

+1

類似的問題在這裏, http://stackoverflow.com/questions/622890/why-would-pthread-create-fail-with-only-2-threads-active?rq=1 – deepdive

+0

沒有找到它第一次Divyang,我要去試試,謝謝你的指針,當我知道它是否有效時我會回覆你 – djfoxmccloud

回答

1

你應該叫pthread_join釋放所獲得的資源。或者你可以使用屬性PTHREAD_CREATE_DETACHED在這種情況下你不需要使用pthread_join