簡體   English   中英

Pthread Mutex掛在一個線程中

[英]Pthread Mutex hanging in one thread

在用C語言編寫的過程中,我具有三個線程,如下所示:1.第一個線程處理偵聽和接受新的TCP連接。 2.為每個新的新連接調度第二個線程,並讀取視頻文件並將其流回客戶端。 3.第三個線程偵聽來自其他應用程序(例如IPC)的UDP套接字上的事件。

這是我讀取請求的視頻文件並將其寫入套接字的代碼,我嘗試如下鎖定和解鎖互斥鎖,以使第三線程稍后能夠獲取互斥鎖:

        /* Read till end of file is not reached. */
        while (1) /* Loop forever */
        {
            len = fread(read_buf, 1, 1024, pf);
            pthread_mutex_lock(&client->mutex);

            /* Write to the socket. */
            if (write(client->fd, read_buf, len) <= 0)
                break;

            if (len < 1024)
            {
                /* Reset to the begining of the file. */
                fseek(pf, 0L, SEEK_SET);
                break;
            }

            client->offset = ftell(pf);
            pthread_mutex_unlock(&client->mutex);
            usleep(5);
        }
        fclose(pf);
        client->state = 4;

在第三個線程中,當事件到達時,我嘗試搜索其相應的用戶,並獲取互斥鎖以執行某些操作,但是在嘗試按以下方式獲取互斥鎖時,線程卡住了問題,並且不執行以下操作pthread_mutex_lock

int handle_event(EVENT_TYPE event, TransactionID t_id, void *data)
{
switch (event)
{
    case PREPARE_TO_EXPORT:
    {
            // Searching for the client if the client is found do the below
            printf("Prepared to export.\n");
            pthread_mutex_lock(&client->mutex);
            printf("Handling Export\n");
    }
}
}

可能是什么問題?

如果/當線程2跳出循環時,它不會解鎖互斥鎖。

我發現了問題,這是我的錯誤。 當我收到一個新請求時,我為用戶創建了一個新結構,並將其添加到unordered_map中,稍后,我繼續將該結構作為對象處理,但是我必須使用來獲取已添加到該無序地圖中的結構安置。

正如我認為的那樣,無序映射不會將結構本身作為自身並添加到其容器中,而是會為其創建自己的克隆。

暫無
暫無

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

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