Multithreading 当服务器有一个正在运行的线程时,为什么fopen会被阻止?
当服务器通过std::async打开管道进行读取并启动线程时,客户机第一次可以打开管道进行写入,但如果客户机再次写入,客户机将被阻止,直到线程结束,服务器可以打开管道进行读取。 有什么想法吗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
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;
}