gpt4 book ai didi

c - 使这个简单的代码线程安全

转载 作者:行者123 更新时间:2023-11-30 17:50:07 25 4
gpt4 key购买 nike

我刚刚很好地利用了多线程。因此......我必须学习多线程。我有一个非常简单的程序:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com