[英]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.