我正在编写一个程序,线程使用管道相互交互 . 在我的程序中,主线程创建一个应用程序线程和一个协议线程 . 为协议线程创建了两个管道,它在读取管道上被阻止 . 应用程序线程写入协议线程的其中一个管道 .

现在我有3个线程(主线程,1个协议线程,1个应用程序线程) . 应用程序线程写入其中一个协议管道后,协议线程不会立即读取数据 . 如果我按两次/三次输入,它会读取数据 . 不知道这里发生了什么 .

语法可能不完全正确..但只是给出了一个想法

// application thread
char* data = new char[100];
for (i = 0; i < 100; ++i)
{
    data[i] = 'm';
}

write(fd, &data, 100);
sleep(10);

//protocol thread
while(1)
{
    char data1[100];
    read(fd1, &data1, 100);
}

为什么协议线程不立即读取数据 . 我看到管道没有缓冲(fflush没有帮助) . 那么“输入”(返回)做什么来使线程解除阻塞并读取数据 .

任何人都可以帮我这个 . 谢谢!