Ric*_*dev 2 c multithreading pthreads
我试图编写以下代码,但徒劳无功.有人可以帮忙吗?
创建一个连续循环的线程,提示用户输入一个整数.第二个线程休眠十秒钟,然后显示:到目前为止输入的最大值; .然后它又回到睡眠状态并重复.
我非常困惑和困惑.有人可以帮忙吗
到目前为止这是代码
pthread_create(&thread1, NULL, &inputfunction, NULL);
pthread_create(&thread2,NULL, &inputfunction, NULL);
pthread_join(thread1,NULL);
// pthread_join(thread2,NULL);
// pthread_mutex_init(&array_lock, NULL);
return 0;
}
void *inputfunction()
{
//int *values= ptr_value;
int i;
int arr[5];
printf("Input values:");
for (i=0;i<5;i++)
scanf("%d",&arr[i]);
sleep(10);
int max=0;
for (i=0;i<5;i++)
{
if (arr[i]>max)
max=arr[i];
}
printf("max=",max);
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
由于这似乎是作业,我不会给你写任何代码,但一点分析可能会帮助你更好地理解这个问题.
打破要求及如何分析?
你需要两个独立的线程,一个用于接收来自用户的变量并存储它,另一个线程在每10秒后唤醒并读取当前输入的值.
除了明显的事实,你需要2个线程注意强调存储和读取,它意味着需要从两个不同的线程访问相同的变量,这告诉你它应该是一个全局变量.
你当前的代码有什么问题?
你有两个线程可以,但是你需要两个不同的线程函数,因为你需要在两个线程中执行不同的活动.因此你不能inputfunction()为两个线程重用相同的函数.您将需要两个不同的功能,我们已经在Q的第一部分中详细说明了每个功能应该做什么.
提示:查看环境文档(Windows/Linux等)以获取计时器,并将自己的函数注册为回调函数,这些函数实际上可以简化完全生成单独线程的需要.
此外,您需要在两个线程之间访问相同的全局变量,这意味着两个线程可以相互竞争以访问共享变量,因此您需要某种同步机制来避免这种情况.
上述分析应该让您开始编程,尝试这样做,如果您遇到任何问题,请随时在这里提出一个问题,详细说明您尝试过的内容以及您面临的确切问题.
祝一切顺利 :)