POSIX C程序(MUTEX程序)

时间:2011-03-22 11:59:13

标签: c pthreads

我是C编程的初学者,我正在尝试在下面的程序中执行互斥,但是我没有得到正确的输出。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREAD 4
void *func(void *p);
int counter=0,a=2;
pthread_mutex_t mutexsum = PTHREAD_MUTEX_INITIALIZER;

main()
{
    int i,rc;
    pthread_t threadid[NUM_THREAD];

    for(i = 0; i< NUM_THREAD; i++)
    {
        a = a + i;
        printf("Value of a is %d\n",a);
        rc = pthread_create(&threadid[i],NULL,func,(void *)a);
        if(rc)
        {
            printf("Error in thred creation thread[%d] %d",i,rc);
        }
    }

    for(i = 0; i< NUM_THREAD; i++)
    {
        pthread_join(threadid[i],NULL);
    }

    printf("Final value of counter is %d\n",counter);
    pthread_exit(NULL);
}

void *func(void *p)
{
    int i;
    i = (int) p;
    pthread_mutex_lock(&mutexsum);
    counter = counter+a;
    printf("%d\n",counter);
    pthread_mutex_unlock(&mutexsum);
    pthread_exit(NULL);
}

根据上述程序和我的理解,所需的输出将是18,但它给出了32。

2 个答案:

答案 0 :(得分:2)

func使用a来增加。我猜你的意思是增加i。实际上,到每个线程运行时,a必须保持最终值8,因此您要将counter增加8次。

答案 1 :(得分:1)

您在线程函数中没有使用 i ,但 a