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