Linux--线程互斥(加锁)
    		       		warning:
    		            这篇文章距离上次修改已过451天,其中的内容可能已经有所变动。
    		        
        		                
                在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进行操作,然后解锁,保证了同一时刻只有一个线程可以访问资源。
评论已关闭