作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚很好地利用了多线程。因此......我必须学习多线程。我有一个非常简单的程序:
void *listenloop(void *arg){
while (1){
Sleep(2000);
puts("testing 123\n");
}
return NULL;
}
int main(){
pthread_t listener;
pthread_create(&listener,NULL,listenloop,"foo");
char testinput[200];
while(1){
puts("Scanning: ");
scanf("%s",testinput);
puts("\n\n");
printf("You typed: %s: ",testinput);
}
}
理论是它等待用户输入,回显它,同时定期打印。
不出我所料,实际上(对于这件事上我的上司来说显然是显而易见的)输出是“困惑的”。
现在我可以想出几种方法解决这个问题,但没有实际的解决方案。这种性质的事情应该如何实现?可以通过在程序的输出显示给用户后对其进行操作来完成吗?
谢谢!
最佳答案
因此,只需使用单个 pthread_mutex_t 将打印内容包装在 pthread_mutex_lock/unlocks 中,就可以了。
http://linux.die.net/man/3/pthread_mutex_lock
pthread_mutex_t = PTHREAD_MUTEX_INITIALIZER;
void *listenloop(void *arg){
while (1){
Sleep(2000);
pthread_mutex_lock(&mutex);
puts("testing 123\n");
pthread_mutex_unlock(&mutex);
}
return NULL;
}
int main(){
pthread_t listener;
pthread_create(&listener,NULL,listenloop,"foo");
char testinput[200];
while(1){
pthread_mutex_lock(&mutex);
puts("Scanning: ");
pthread_mutex_unlock(&mutex);
scanf("%s",testinput);
pthread_mutex_lock(&mutex);
puts("\n\n");
printf("You typed: %s: ",testinput);
pthread_mutex_unlock(&mutex);
}
}
关于c - 使这个简单的代码线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17461042/
我是一名优秀的程序员,十分优秀!