繁体   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