读书人

getchar()会使线程死锁么,该如何解决

发布时间: 2012-10-18 13:46:55 作者: rapoo

getchar()会使线程死锁么
主线程:
main()
{
//.........

while(1)
putchar(getchar);
}

辅助线程:
void f (void)
{
while(1)
ungetc('1',stdin);
}

为什么每次打几个字符就不动了,然后按回车就又出几个,不按回车的话按什么出什么。我看了下好像是 f 被锁住了,是不是getchar()导致的。
我怀疑是由于两个线程同时在访问输入流导致的,因为我把两句放到同一个程序段就是对的。
是不是要用到临界区,如果是的话那参数可以直接是stdin么

我是想一个线程模拟键盘输入,另一个读出,有没有其他方法,方法不要太高深,我只是大一学生,才学完C

[解决办法]
getchar()

阻塞,等待用户输入
线程挂起
[解决办法]
getchar()函数的执行模式是阻塞式的,当需要接收字符流的时候,当前线程就会被挂起,其后的所有代码均要等待用户输入回车表示输入完毕后,线程才会被调度进入CPU时钟内执行其余的代码。

读书人网 >C语言

热点推荐