我剛開始學習線程和信號量。 我已經在C中創建了一個簡單的程序,但它沒有按預期工作。 請看代碼並告訴我我錯在哪裏?信號量不正常?
在此先感謝。
我使用的是Ubuntu 14.04。
命令我使用
的gcc -o富th.c -lpthread
./foo
th.c是我的C文件的名稱
在執行每次程序應該輸出:
Thread 1
Thre ad 2
你好!
但我得到大部分的時間
線程2
線程1
代碼:
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
void myFun1(void *ptr);
void myFun2(void *ptr);
char buf[24];
sem_t mutex;
int main(){
pthread_t t1;
pthread_t t2;
char *msg1 = "Thread 1";
char *msg2 = "Thread 2";
sem_init(&mutex, 0, 1);
printf("mutex 00 %d \n", mutex);
pthread_create(&t1, NULL, (void *) &myFun1, (void *) msg1);
pthread_create(&t2, NULL, (void *) &myFun2, (void *) msg2);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
sem_destroy(&mutex);
return 0;
}
void myFun1 (void *ptr) {
char *msg = (char *)ptr;
printf("%s\n", msg);
sem_wait(&mutex);
sprintf(buf, "%s", "Hello Threads!");
sem_post(&mutex);
pthread_exit(0);
}
void myFun2(void *ptr) {
char *msg = (char *)ptr;
printf("%s\n", msg);
sem_wait(&mutex);
printf("%s\n", buf);
sem_post(&mutex);
pthread_exit(0);
}
你期望什麼?我怎麼能說,爲什麼它不按照你期望的方式工作,如果你不告訴你的期望? – gnasher729
@ gnesher729 - 對不起,我忘了更新,現在我已經更新了這個問題。 –