【发布时间】:2020-02-16 17:38:03
【问题描述】:
我正在尝试实现一个具有读取、写入、关闭功能的管道。 我的 main 创建了 2 个线程,一个从数组读取并写入管道,另一个从管道读取并写入标准输出。我使用一个简单的循环缓冲区作为管道,并使用彼得森的算法来同步它们。
我的 main 应该等待它们完成操作或从 stdin 接收“退出”输入,在这种情况下它应该调用 pipe_close() 并通过使它们返回来终止 2 个线程
我应该如何在不阻塞的情况下从标准输入获取输入?如何使线程终止?我应该使用 Lamports 算法之类的东西来同步所有 3 个吗?
注意:我不能使用 pthread.h 中的任何函数,除了 create
void *myread(void *par) {
//read char from array store in c
write_to_pipe(c)
}
void *mywrite(void *par) {
read_from_pipe(&c);
//print to stdout
}
main() {
//create threads
//wait until theads return or "quit" is written in stdin, call pipe_close and cause threads to return
}
【问题讨论】:
-
你尝试了什么?
-
作为开始,请使用tour 并阅读How to Ask。您的问题还没有准备好在这里提问,因为它非常开放且不具体。
-
通过“从标准输入获取输入而不阻塞”,你的意思是你想让tty进入原始模式吗?通常,如果您从文件描述符中
read,则如果数据可用,则不会发生阻塞。我怀疑您将 stdin 与 tty 混为一谈。不要那样做。
标签: c multithreading algorithm pipe