我正在尝试为以下代码编写但是徒劳无功。有人可以帮忙吗?
创建一个连续循环的线程,提示用户输入一个整数。第二个线程休眠十秒钟,然后显示:到目前为止输入的最大值; 。然后它重新入睡并重复。
我非常困惑和困惑。有人可以帮忙吗
这是到目前为止的代码
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;
}
答案 0 :(得分:5)
由于这似乎是作业,我不会给你写任何代码,但是一些分析可能会帮助你更好地理解这个问题。
打破要求&amp;如何分析?
你需要两个独立的线程,一个用于接收来自用户的变量, 存储 ,另一个线程每隔10秒唤醒一次< strong> 读取 当前输入的值 除了明显的事实,你需要2个线程注意强调 存储 &amp; 阅读 ,它意味着需要从两个不同的线程访问相同的变量,这两个线程告诉您它应该是一个全局变量。
您当前的代码有什么问题?
你有两个线程可以,但你需要两个不同的线程函数,因为你需要在两个线程中执行不同的活动。因此,你不能为两个线程重用相同的函数inputfunction()
。你需要两个不同的功能&amp;我们已经在Q的第一部分详细说明了每个函数应该做什么
提示:查看环境文档(Windows / Linux等)以获取计时器,并将自己的函数注册为回调函数,这实际上可以简化完全生成单独线程的需要。
此外,您需要在两个线程之间访问相同的全局变量,这意味着两个线程之间可以 race 来访问共享变量,因此您需要某种<强> synchronization mechanism 以避免这种情况。
上述分析应该让您开始编程,尝试这样做,如果您遇到任何问题,请随时在这里提出一个问题,详细说明您尝试过的内容以及您面临的确切问题。
一切顺利:)
答案 1 :(得分:2)
您只编写了一个模糊第一个线程和第二个线程之间的线路的函数。
如果您只是按照说明操作,那么您将会更进一步:
创建一个连续循环的线程,提示用户输入一个整数。
/* global */ int g_i;
void Thread_One_Main(void)
{
g_i = 0;
while( g_i != -1)
{
scanf("%d", &g_i);
}
}
第二个线程休眠十秒钟,然后显示到目前为止输入的最大值 然后它又回到睡眠状态并重复。
void Thread_Two_Main(void)
{
int max = 0;
while(g_i != -1)
{
sleep(10);
if (g_i > max)
{
max = g_i;
printf("New max value: %d\n", max);
}
}
}
P.S。我决定使用-1作为停止值,因为你没有提到关于程序何时或如何结束的任何内容。
现在,你能写一个main()
来启动这两个线程吗?
你可以在两个线程之间进行同步,这样它们就不会同时从g_i读写吗?