ПРОГРАММА POSIX C (ПРОГРАММА MUTEX) - PullRequest
0 голосов
/ 22 марта 2011

Я новичок в программировании на 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 ]

2 голосов
/ 22 марта 2011

func использует a для увеличения. Я предполагаю, что вы хотели увеличить на i. Таким образом, к моменту запуска каждого потока a должно иметь конечное значение 8, поэтому вы добавляете 8 к counter четыре раза.

1 голос
/ 22 марта 2011

Вы не используете i в функции потока, но a .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...