两个线程调用同一个线程,C语言怎么加锁
时间: 2024-12-19 17:10:46 浏览: 3
在C语言中,为了防止多个线程同时访问共享资源,可以使用互斥锁(mutex)来进行同步。标准库`pthread.h`提供了互斥锁的函数,如`pthread_mutex_init()`用于初始化锁,`pthread_mutex_lock()`用于获取锁,`pthread_mutex_unlock()`用于释放锁。
下面是一个简单的示例:
```c
#include <pthread.h>
// 初始化互斥锁
pthread_mutex_t mutex;
int status;
status = pthread_mutex_init(&mutex, NULL); // 初始化,NULL表示默认属性
// 线程A
void* thread_A(void* arg) {
pthread_mutex_lock(&mutex); // 获取锁
// 访问共享资源
printf("Thread A is executing...\n");
pthread_mutex_unlock(&mutex); // 释放锁
return NULL;
}
// 线程B
void* thread_B(void* arg) {
pthread_mutex_lock(&mutex); // 尝试获取锁
if (status == 0) { // 如果锁可用
// 访问共享资源
printf("Thread B is executing...\n");
} else {
// 锁已被占用,等待
printf("Thread B waiting for the lock...\n");
}
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
pthread_t tid_A, tid_B; // 创建线程
status = pthread_create(&tid_A, NULL, thread_A, NULL);
if (status != 0) {
// 错误处理
return -1;
}
status = pthread_create(&tid_B, NULL, thread_B, NULL);
if (status != 0) {
// 错误处理
pthread_cancel(tid_A);
pthread_join(tid_A, NULL);
return -1;
}
// 等待线程结束
pthread_join(tid_A, NULL);
pthread_join(tid_B, NULL);
pthread_mutex_destroy(&mutex); // 销毁锁
return 0;
}
```
在这个例子中,当一个线程获得锁后,其他线程需要等待直到锁被释放才能继续执行。这就保证了对共享资源的访问顺序,实现了线程间的同步。
阅读全文