Linux多线程编程是系统编程的核心内容之一,涉及以下关键知识点:
#include <pthread.h>gcc -pthread 或 gcc -lpthread。c
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void *), void *arg);终止线程:
pthread_exit(void *retval)。pthread_cancel)。等待线程结束:
int pthread_join(pthread_t thread, void **retval);
c
pthread_detach(pthread_t thread);c
pthread_mutex_init(&mutex, NULL);
pthread_mutex_destroy(&mutex);c
pthread_mutex_lock(&mutex); // 阻塞
pthread_mutex_trylock(&mutex); // 非阻塞
pthread_mutex_unlock(&mutex);c
pthread_cond_wait(&cond, &mutex); // 等待条件(自动释放锁)
pthread_cond_signal(&cond); // 唤醒一个等待线程
pthread_cond_broadcast(&cond); // 唤醒所有等待线程c
pthread_rwlock_rdlock(&rwlock); // 读锁
pthread_rwlock_wrlock(&rwlock); // 写锁c
pthread_spin_lock(&spinlock);c
pthread_barrier_wait(&barrier);strtok_r 是 strtok 的可重入版本)。c
__thread int tls_var; // GCC扩展
或
pthread_key_create(&key, destructor);
pthread_setspecific(key, value);sleep)、手动设置 pthread_testcancel()。c
pthread_attr_init(&attr);
pthread_attr_setstacksize(&attr, 1024*1024); // 1MB栈
pthread_create(&thread, &attr, func, NULL);pthread_sigmask 屏蔽其他线程)。sigwait 同步处理信号。valgrind --tool=helgrind 检测数据竞争。gdb 调试多线程(info threads、thread <id>)。std::thread、std::mutex(需C++11及以上)。pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
Queue queue;
void* producer(void* arg) {
while (1) {
pthread_mutex_lock(&mutex);
queue.push(item);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
}
void* consumer(void* arg) {
while (1) {
pthread_mutex_lock(&mutex);
while (queue.empty()) {
pthread_cond_wait(&cond, &mutex);
}
Item item = queue.pop();
pthread_mutex_unlock(&mutex);
process(item);
}
}
掌握这些知识点后,可以进一步学习线程池设计、无锁编程(如原子操作)、多核并行优化(OpenMP)等高级主题。