我已经看过其他问题,似乎仍然无法理解这个概念。我创建了四个线程,每个线程需要与同一个线程进行通信。 (最小和显示),(最大和显示),等等.. 我知道我需要使用:
pthread_mutex_t myLock1 = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock(&myLock1);
(some global variable) = ....;
pthread_mutex_unlock(&myLock1);
这是我创建的一个主题:
pthread_create(&minThread, NULL, (void *) mini, (void *) numbers);
pthread_join(minThread, (void *) &min);
void *mini(void *numbs1)
{
int *numbers = (int *) numbs1;
min = malloc(sizeof(int));
*min = (numbers[0]);
for (i = 0; i < length; i++) //Computing min value
{
if ( numbers[i] < *min )
{
*min = numbers[i];
}
}
printf("Min has been computed.\n");
pthread_exit(min);
}
我现在应该使用另一个线程(disThread)来显示我在minThread(min)中计算的变量以及使用我指定的那些互斥系统调用完成计算的其他类似线程。如何正确设置?感谢任何提示以进一步理解。
答案 0 :(得分:0)
事实证明,使用互斥系统调用非常简单。对于遇到类似问题的其他人来说,线程函数void * mini和void * disi遵循以下格式:
void *mini(void *numbs1)
{
pthread_mutex_lock(&theLock);
int *numbers = (int *) numbs1;
min = malloc(sizeof(int));
*min = (numbers[0]);
for (i = 0; i < LENGTH; i++) //Computing min value
{
if ( numbers[i] < *min )
{
*min = numbers[i];
}
}
pthread_mutex_unlock(&theLock);
printf("Min has been computed.\n");
pthread_exit(min);
}
void *disi()
{
pthread_mutex_lock(&theLock);
x = *min; //Displaying min value (x initialized as global variable)
pthread_mutex_unlock(&theLock);
printf("The Minimum value is %d\n", x);
}
互斥锁和互斥锁解锁应涵盖两个线程之间共享变量的范围。这样两个线程同时工作就没有干扰。