簡體   English   中英

Pthread_create錯誤11只有5個並發線程

[英]Pthread_create error 11 with only 5 simultaneous thread

我在多線程程序中有問題。 我的程序有4個始終在這里的線程。 我們將從1到4命名這些線程。

我的程序的目標是在與外圍設備的套接字上進行通信。 線程號4用於將消息發送到外圍設備。

每次將消息發送到外圍設備時,我都會使用:

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

這將創建一個線程來偵聽套接字上的響應,當套接字不再包含任何消息時,該線程將返回:例如,如果iRet = recv(m_iSocket, pcRecBuf, DEFAULT_READ_DATA_LEN, 0); 使iRet取值為0。

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

這里的問題是幾個小時后,pthread create將崩潰,並顯示錯誤11。我在堆棧溢出中看到這意味着系統可能沒有足夠的資源或太多的線程。

但是我不了解QtCreator調試中的情況,我只能看到從1到4的線程。我知道我可能已經創建了300個線程,但是線程列表僅包含4個,這意味着所有其他線程都被終止了。

所以我真的不知道最大的線程創建數量是在整個過程的生命周期中還是同時存在的線程數量。

我是否應該找到一種方法來讓一個線程監聽,即使它在空套接字上監聽呢? 我的實現方式不好嗎?

您應該調用pthread_join釋放獲得的資源。 或者在這種情況下,您可以使用屬性PTHREAD_CREATE_DETACHED ,而無需使用pthread_join

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM