在C語(yǔ)言中,pthread_t
是一個(gè)用于表示線(xiàn)程的數(shù)據(jù)類(lèi)型
#include<stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
int shared_data = 0;
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
void *producer(void *arg) {
int i;
for (i = 0; i < 10; i++) {
pthread_mutex_lock(&lock);
shared_data++;
printf("Producer: %d\n", shared_data);
pthread_mutex_unlock(&lock);
sleep(1);
}
return NULL;
}
void *consumer(void *arg) {
int i;
for (i = 0; i < 10; i++) {
pthread_mutex_lock(&lock);
printf("Consumer: %d\n", shared_data);
shared_data--;
pthread_mutex_unlock(&lock);
sleep(1);
}
return NULL;
}
int main() {
pthread_t producer_thread, consumer_thread;
// 創(chuàng)建生產(chǎn)者線(xiàn)程
if (pthread_create(&producer_thread, NULL, producer, NULL) != 0) {
perror("Failed to create producer thread");
exit(1);
}
// 創(chuàng)建消費(fèi)者線(xiàn)程
if (pthread_create(&consumer_thread, NULL, consumer, NULL) != 0) {
perror("Failed to create consumer thread");
exit(1);
}
// 等待線(xiàn)程完成
pthread_join(producer_thread, NULL);
pthread_join(consumer_thread, NULL);
// 銷(xiāo)毀互斥鎖
pthread_mutex_destroy(&lock);
return 0;
}
這個(gè)示例展示了如何使用 pthread_t
和互斥鎖實(shí)現(xiàn)線(xiàn)程間通信。生產(chǎn)者線(xiàn)程和消費(fèi)者線(xiàn)程都可以訪(fǎng)問(wèn)共享數(shù)據(jù) shared_data
,但是通過(guò)使用互斥鎖,我們確保了在任何時(shí)候只有一個(gè)線(xiàn)程可以訪(fǎng)問(wèn)該數(shù)據(jù)。