我已经看过其他问题,但似乎仍然无法理解这个概念。我创建了四个线程,每个线程都需要与同一线程进行通信。(最小和显示),(最大和显示),依此类推。我知道我需要使用:
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)中计算的变量,以及使用我指定的那些Mutex System调用进行计算的其他类似线程。我该如何正确设置?任何技巧都值得注意以进一步理解。
事实证明,使用Mutex系统调用非常简单。对于任何遇到类似问题的人,线程函数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 %dn", x);
}
mutex锁定和Mutex解锁应涵盖两个线程之间共享变量的范围。因此,这两个线程同时工作之间没有干扰。