ตอนนี้ผมลองเขียน pthread ใน VMWare ใช้ ubuntu 12.04.5
ปรากฏว่า มันไม่รันสลับกันเหมือนตัวอย่าง ในตัวอย่างมันจะรันสลับกันไปมา แต่ output ที่ผมได้นี้เรียงกันเลยครับ
เรียงเป็น
2 0
2 1
2 2
.
.
.
2 99
1 0
1 1
1 2
.
.
.
1 99
ทั้งที่มันควรจะสลับกัน หาตาม google แล้ว แก้ตามแล้วก็ไม่ได้
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5
int ch = 1;
unsigned long c = 0;
void *PrintHello1(void *threadid) {
for(int i=0 ; i<100 ; i++){
printf("1 %d\n",i);
}
pthread_exit(NULL);
}
void *PrintHello2(void *threadid) {
for(int i=0 ; i<100 ; i++){
printf("2 %d\n",i);
}
pthread_exit(NULL);
}
int main (int argc, char *argv[]) {
pthread_t t1,t2;
int rc, t;
if (rc = pthread_create(&t1, NULL, PrintHello1, (void *)t)){
printf("ERROR; return code from pthread_create() is %d\n", rc);
}
if (rc = pthread_create(&t2, NULL, PrintHello2, (void *)t)){
printf("ERROR; return code from pthread_create() is %d\n", rc);
}
pthread_join(t1,NULL);
pthread_join(t2,NULL);
pthread_exit(NULL);
}
ถามเกี่ยวกับ pthread หน่อยครับ
ปรากฏว่า มันไม่รันสลับกันเหมือนตัวอย่าง ในตัวอย่างมันจะรันสลับกันไปมา แต่ output ที่ผมได้นี้เรียงกันเลยครับ
เรียงเป็น
2 0
2 1
2 2
.
.
.
2 99
1 0
1 1
1 2
.
.
.
1 99
ทั้งที่มันควรจะสลับกัน หาตาม google แล้ว แก้ตามแล้วก็ไม่ได้
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5
int ch = 1;
unsigned long c = 0;
void *PrintHello1(void *threadid) {
for(int i=0 ; i<100 ; i++){
printf("1 %d\n",i);
}
pthread_exit(NULL);
}
void *PrintHello2(void *threadid) {
for(int i=0 ; i<100 ; i++){
printf("2 %d\n",i);
}
pthread_exit(NULL);
}
int main (int argc, char *argv[]) {
pthread_t t1,t2;
int rc, t;
if (rc = pthread_create(&t1, NULL, PrintHello1, (void *)t)){
printf("ERROR; return code from pthread_create() is %d\n", rc);
}
if (rc = pthread_create(&t2, NULL, PrintHello2, (void *)t)){
printf("ERROR; return code from pthread_create() is %d\n", rc);
}
pthread_join(t1,NULL);
pthread_join(t2,NULL);
pthread_exit(NULL);
}