在 CentOS 上配置和使用 C 语言多线程,本质上就是使用 POSIX 线程(pthread)。下面从「环境准备 → 编译 → 示例 → 常见问题」一步步说明。
gcc --version
如果没有:
sudo yum install gcc
pthread 是 glibc 的一部分,CentOS 默认支持,不需要额外安装库。
thread_demo.c#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void* thread_func(void* arg) {
int id = *(int*)arg;
printf("线程 %d 开始\n", id);
sleep(1);
printf("线程 %d 结束\n", id);
return NULL;
}
int main() {
pthread_t tid[3];
int ids[3];
for (int i = 0; i < 3; i++) {
ids[i] = i;
pthread_create(&tid[i], NULL, thread_func, &ids[i]);
}
for (int i = 0; i < 3; i++) {
pthread_join(tid[i], NULL);
}
printf("主线程结束\n");
return 0;
}
必须链接 pthread 库
gcc thread_demo.c -o thread_demo -pthread
gcc thread_demo.c -o thread_demo -lpthread
运行:
./thread_demo
nproc
C 中获取:
#include <unistd.h>
int n = sysconf(_SC_NPROCESSORS_ONLN);
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&tid, &attr, func, NULL);
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock(&lock);
// 临界区
pthread_mutex_unlock(&lock);
undefined reference to pthread_create✅ 原因:没加 -pthread
✅ 原因:主线程没 pthread_join
gcc omp.c -fopenmp
pthread_barrier(线程同步)如果你有具体需求(比如:
可以告诉我,我可以直接给你对应代码。