Linux C 线程是指在 Linux 操作系统下使用 C 语言编写的程序中,能够实现并发执行的多个执行流。线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。
下面是一个简单的 Linux C 线程示例,创建两个线程分别打印奇数和偶数:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void* print_odd(void* arg) {
for (int i = 1; i <= 100; i += 2) {
printf("Odd: %d\n", i);
}
return NULL;
}
void* print_even(void* arg) {
for (int i = 2; i <= 100; i += 2) {
printf("Even: %d\n", i);
}
return NULL;
}
int main() {
pthread_t thread_odd, thread_even;
if (pthread_create(&thread_odd, NULL, print_odd, NULL)) {
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
if (pthread_create(&thread_even, NULL, print_even, NULL)) {
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
pthread_join(thread_odd, NULL);
pthread_join(thread_even, NULL);
return 0;
}
问题:多个线程同时访问共享资源可能导致数据不一致。
解决方法:使用互斥锁(mutex)或其他同步机制,如信号量(semaphore)、条件变量(condition variable)。
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void* safe_increment(void* arg) {
int* counter = (int*)arg;
pthread_mutex_lock(&mutex);
(*counter)++;
pthread_mutex_unlock(&mutex);
return NULL;
}
问题:两个或多个线程互相等待对方释放资源,导致程序无法继续执行。
解决方法:确保加锁顺序一致,避免嵌套锁,使用超时机制等。
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;
void* thread_func1(void* arg) {
pthread_mutex_lock(&mutex1);
pthread_mutex_lock(&mutex2);
// 执行操作
pthread_mutex_unlock(&mutex2);
pthread_mutex_unlock(&mutex1);
return NULL;
}
void* thread_func2(void* arg) {
pthread_mutex_lock(&mutex1); // 确保加锁顺序一致
pthread_mutex_lock(&mutex2);
// 执行操作
pthread_mutex_unlock(&mutex2);
pthread_mutex_unlock(&mutex1);
return NULL;
}
通过合理的设计和使用同步机制,可以有效解决线程并发执行中遇到的问题。
领取专属 10元无门槛券
手把手带您无忧上云