两个pthreads之间的通信



我已经看过其他问题,但似乎仍然无法理解这个概念。我创建了四个线程,每个线程都需要与同一线程进行通信。(最小和显示),(最大和显示),依此类推。我知道我需要使用:

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解锁应涵盖两个线程之间共享变量的范围。因此,这两个线程同时工作之间没有干扰。

最新更新