Multithreading 当服务器有一个正在运行的线程时,为什么fopen会被阻止?

Multithreading 当服务器有一个正在运行的线程时,为什么fopen会被阻止?,multithreading,pipe,fopen,Multithreading,Pipe,Fopen,当服务器通过std::async打开管道进行读取并启动线程时,客户机第一次可以打开管道进行写入,但如果客户机再次写入,客户机将被阻止,直到线程结束,服务器可以打开管道进行读取。 有什么想法吗 Kai为我令人困惑的描述道歉。下面是一些代码片段 服务器端: #define FIFO_FILE "/tmp/fifo" while (1) { char readbuf[25]; FILE *file = fopen(FIFO_FILE, "r"); fg

当服务器通过std::async打开管道进行读取并启动线程时,客户机第一次可以打开管道进行写入,但如果客户机再次写入,客户机将被阻止,直到线程结束,服务器可以打开管道进行读取。 有什么想法吗


Kai

为我令人困惑的描述道歉。下面是一些代码片段

服务器端:

#define FIFO_FILE   "/tmp/fifo"

    while (1)
    {

    char readbuf[25];

    FILE *file = fopen(FIFO_FILE, "r");
    fgets(readbuf, 25, file);
    std::queue<std::string>().swap(msg);

    msg.push(readbuf);

    while (!feof(file))
    {
        fgets(readbuf, 25, file);
        msg.push(readbuf);
    }

    std::cout << "message num: " << msg.size() << std::endl;
    std::future<void> ret = std::async (std::launch::async, command_process, std::ref(msg), std::ref(binfo));
    fclose(file);
    std::cout << "messages are being processed!\n";

    }
服务器启动后,将在fgets处等待。当客户端向FIFO发送字符串时,服务器接收字符串并将其存储在msg中, 然后将其传递给线程命令\u进程进行处理,服务器等待 在fopen获取进一步消息但是如果客户端再次尝试发送消息,它将在客户端的fopen被阻止,直到服务器的线程完成处理,服务器继续接收客户端的消息

我希望客户端不应该被阻止发送消息,服务器应该立即接收消息,然后中止上一条消息以处理新消息


Kai

试着把你的问题当作你还不知道问题出在哪里。你会发现你没有提供足够的信息让其他人理解。另见和。
int main(int argc, char *argv[])
{
    FILE *fp;

    if((fp = fopen(FIFO_FILE, "w")) == NULL) {
        perror("fopen \n");
        return -1;
    }

    fputs(argv[1], fp);
    fclose(fp);
    return 0;
}