本文将介绍C语言中的并发编程,包括多线程、互斥锁、条件变量等概念和实现方式。
多线程
在C语言中,多线程可以通过POSIX线程库(pthread)来实现。
- 创建线程:使用
pthread_create
函数创建线程。 - 线程函数:定义线程要执行的函数。
- 线程终止:使用
pthread_join
函数等待线程结束。
示例
#include <pthread.h>
void* thread_function(void* arg) {
// 线程执行代码
return NULL;
}
int main() {
pthread_t thread_id;
pthread_create(&thread_id, NULL, thread_function, NULL);
pthread_join(thread_id, NULL);
return 0;
}
互斥锁
互斥锁可以防止多个线程同时访问共享资源。
- 创建互斥锁:使用
pthread_mutex_t
类型。 - 加锁和解锁:使用
pthread_mutex_lock
和pthread_mutex_unlock
函数。
示例
#include <pthread.h>
pthread_mutex_t lock;
void* thread_function(void* arg) {
pthread_mutex_lock(&lock);
// 临界区代码
pthread_mutex_unlock(&lock);
return NULL;
}
条件变量
条件变量用于线程间的同步。
- 创建条件变量:使用
pthread_cond_t
类型。 - 等待条件:使用
pthread_cond_wait
函数。 - 通知条件:使用
pthread_cond_signal
或pthread_cond_broadcast
函数。
示例
#include <pthread.h>
pthread_cond_t cond;
pthread_mutex_t lock;
void* thread_function(void* arg) {
pthread_mutex_lock(&lock);
// 等待条件
pthread_cond_wait(&cond, &lock);
pthread_mutex_unlock(&lock);
return NULL;
}
void signal_thread(void) {
pthread_mutex_lock(&lock);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&lock);
}
更多关于C语言并发编程的内容,请访问本站C语言并发编程专题.