在Linux下,实现线程互斥(也称为加锁)通常使用pthread
库中的pthread_mutex_t
类型和相关函数。以下是一个简单的例子,展示了如何使用互斥锁来同步两个线程对共享资源的访问。
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 定义互斥锁
int shared_resource = 0; // 共享资源
void* thread_function_1(void* arg) {
while(1) {
pthread_mutex_lock(&mutex); // 加锁
shared_resource++;
printf("Thread 1: %d\n", shared_resource);
pthread_mutex_unlock(&mutex); // 解锁
sleep(1);
}
return NULL;
}
void* thread_function_2(void* arg) {
while(1) {
pthread_mutex_lock(&mutex); // 加锁
shared_resource--;
printf("Thread 2: %d\n", shared_resource);
pthread_mutex_unlock(&mutex); // 解锁
sleep(1);
}
return NULL;
}
int main() {
pthread_t thread1, thread2;
pthread_create(&thread1, NULL, &thread_function_1, NULL);
pthread_create(&thread2, NULL, &thread_function_2, NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
return 0;
}
在这个例子中,我们定义了一个互斥锁mutex
和一个共享资源shared_resource
。两个线程函数thread_function_1
和thread_function_2
通过互斥锁来确保它们在访问shared_resource
时不会被打断。每个线程都会在加锁后对shared_resource
进行操作,然后解锁,保证了同一时刻只有一个线程可以访问资源。