getchar
是一個 C 語言庫函數,用于從標準輸入(通常是鍵盤)讀取一個字符。在多線程環境中使用 getchar
時,需要注意線程安全和同步問題。以下是一些建議:
getchar
的調用。當一個線程正在使用 getchar
時,其他線程將被阻塞,直到互斥鎖被釋放。這可以確保在同一時刻只有一個線程能夠調用 getchar
。#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_mutex_t lock;
void* thread_func(void* arg) {
char ch;
pthread_mutex_lock(&lock);
ch = getchar();
pthread_mutex_unlock(&lock);
// 處理字符 ch
return NULL;
}
int main() {
pthread_t threads[4];
pthread_mutex_init(&lock, NULL);
for (int i = 0; i < 4; ++i) {
pthread_create(&threads[i], NULL, thread_func, NULL);
}
for (int i = 0; i < 4; ++i) {
pthread_join(threads[i], NULL);
}
pthread_mutex_destroy(&lock);
return 0;
}
getchar
的線程。#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_mutex_t lock;
pthread_cond_t cond;
int data = 0;
void* thread_func(void* arg) {
char ch;
pthread_mutex_lock(&lock);
while (data == 0) {
pthread_cond_wait(&cond, &lock);
}
ch = data;
data = 0;
pthread_mutex_unlock(&lock);
// 處理字符 ch
return NULL;
}
void input_func() {
char ch;
pthread_mutex_lock(&lock);
ch = getchar();
data = ch;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&lock);
}
int main() {
pthread_t threads[4];
pthread_mutex_init(&lock, NULL);
pthread_cond_init(&cond, NULL);
for (int i = 0; i < 4; ++i) {
pthread_create(&threads[i], NULL, thread_func, NULL);
}
for (int i = 0; i < 4; ++i) {
input_func();
}
for (int i = 0; i < 4; ++i) {
pthread_join(threads[i], NULL);
}
pthread_mutex_destroy(&lock);
pthread_cond_destroy(&cond);
return 0;
}
這兩種方法都可以確保在多線程環境中安全地使用 getchar
。你可以根據你的需求和場景選擇合適的方法。