Почему потоки сообщений приходят в обратном порядке? - PullRequest
0 голосов
/ 23 декабря 2011

Когда я запускаю этот код, я получаю сообщения потока точно в обратном порядке.Если я создаю потоки A и B, сначала должно быть указано msg для A, а затем B. Аналогично, если я создаю массив из 10 потоков, msg следует печатать в последовательности.Если возникла какая-либо проблема с синхронизацией, то сообщение не должно показывать одинаковое обратное поведение во всех случаях.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
/* Required for thread APIs */
#include <pthread.h>

#define NTHREADS        10
int counter = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

void *print_thread_msg(void *ptr){
        char *message;
        printf("Thread number %ld\n", pthread_self());
        pthread_mutex_lock(&mutex);
        counter++;
        printf("Counter value: %d\n",counter);
        message = (char *) ptr;
        printf("%s \n",message);
        sleep(1);
        pthread_mutex_unlock(&mutex);
        message = (char *) ptr;
        printf("%s \n",message);
}

int main (void){
        pthread_t threadA, threadB;
        pthread_t thread_id[NTHREADS];

        int i,j;

        char *msgA = "I am thread A";
        char *msgB = "I am thread B";

        pthread_create(&threadA, NULL, print_thread_msg, (void *)msgA);
        pthread_create(&threadB, NULL, print_thread_msg, (void *)msgB);

        for(i=0; i<NTHREADS; i++)
               pthread_create(&thread_id[i], NULL, print_thread_msg, (void *)"print_thread_msg");

        pthread_join(threadA, NULL);
        pthread_join(threadB, NULL);

        for(j=0; j < NTHREADS; j++)
                pthread_join(thread_id[j], NULL);

        printf(" Finally Counter Value : %d\n",counter);

        exit(0);
}

1 Ответ

0 голосов
/ 23 декабря 2011

Ваш код работает правильно для меня.Я пробовал с 3 темы.Он всегда начинается с потока А, а остальные потоки следуют случайным образом.Вы пытались запустить код в другой системе?

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