在 Linux 系统中,线程是进程内的执行单元,共享同一地址空间和资源。因此,线程间通信(Inter-Thread Communication, ITC)通常比进程间通信(IPC)更高效。以下是 Linux 系统中线程间通信的主要机制:
1. 共享内存
线程共享同一进程的地址空间,因此可以直接通过共享变量进行通信。
- 特点:
- 无需额外的系统调用。
- 需要同步机制(如互斥锁、条件变量)来避免竞争条件。
- 示例:
#include <pthread.h> #include <stdio.h> int shared_data = 0; pthread_mutex_t mutex; void* thread_func(void* arg) { pthread_mutex_lock(&mutex); shared_data += 10; printf("Thread updated shared_data: %d\n", shared_data); pthread_mutex_unlock(&mutex); return NULL; } int main() { pthread_t tid; pthread_mutex_init(&mutex, NULL); pthread_create(&tid, NULL, thread_func, NULL); pthread_join(tid, NULL); pthread_mutex_destroy(&mutex); return 0; }
2. 互斥锁(Mutex)
互斥锁用于保护共享资源,确保同一时间只有一个线程可以访问。
- 特点:
- 避免多个线程同时访问共享资源导致的竞争条件。
- 通过
pthread_mutex_init()
、pthread_mutex_lock()
、pthread_mutex_unlock()
等函数操作。
- 示例:
#include <pthread.h> #include <stdio.h> int shared_data = 0; pthread_mutex_t mutex; void* thread_func(void* arg) { pthread_mutex_lock(&mutex); shared_data += 10; printf("Thread updated shared_data: %d\n", shared_data); pthread_mutex_unlock(