linux:线程同步
在Linux中,实现线程同步的常用方法有互斥锁(mutexes)、读写锁(rwlocks)、信号量(semaphores)和条件变量(conditions variables)。以下是使用这些同步机制的示例代码。
- 互斥锁(Mutexes):
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *thread_function(void *arg) {
pthread_mutex_lock(&mutex);
// 临界区代码
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
pthread_t thread;
pthread_create(&thread, NULL, &thread_function, NULL);
pthread_join(thread, NULL);
return 0;
}
- 读写锁(RWLocks):
#include <pthread.h>
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
void *thread_function(void *arg) {
pthread_rwlock_rdlock(&rwlock);
// 读操作
pthread_rwlock_unlock(&rwlock);
return NULL;
}
int main() {
pthread_t thread;
pthread_create(&thread, NULL, &thread_function, NULL);
pthread_join(thread, NULL);
return 0;
}
- 信号量(Semaphores):
#include <semaphore.h>
#include <pthread.h>
sem_t sem;
void *thread_function(void *arg) {
sem_wait(&sem);
// 临界区代码
sem_post(&sem);
return NULL;
}
int main() {
sem_init(&sem, 0, 1);
pthread_t thread;
pthread_create(&thread, NULL, &thread_function, NULL);
pthread_join(thread, NULL);
sem_destroy(&sem);
return 0;
}
- 条件变量(Conditions Variables):
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void *thread_function(void *arg) {
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex);
// 条件满足后的操作
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
pthread_t thread;
pthread_create(&thread, NULL, &thread_function, NULL);
// 主线程执行一些操作,满足条件后
pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
pthread_join(thread, NULL);
return 0;
}
以上代码提供了创建线程、使用互斥锁、信号量和条件变量的基本框架。在实际应用中,您需要根据具体需求来初始化和使用这些同步机制。
评论已关闭