0
當我運行這段代碼時,我完全按照相反的順序得到線程消息。如果我創建線程A和B,則A的msg應該先出現,然後是B.同樣,如果我創建了10個線程的數組,msg應該按順序打印。如果出現任何同步問題,則在所有情況下,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);
}
這裏沒有錯。這是預期的行爲,因爲線程是不確定的,並且你處於調度程序的擺佈之中。你無法預測他們何時會跑步或下單。當我運行10個「print_thread_msg」中的第5個pgm時,線程在A或B之前運行。它可能在每次運行時都不同。 – Duck 2011-12-23 06:12:48
我認爲你是對的。當我在其他系統上運行相同的程序時,它可以正確打印。 – 0x07FC 2011-12-25 18:28:33