linux:线程互斥
在Linux中实现线程互斥,通常使用互斥锁(mutex)。互斥锁提供了一种简单的方法来保证在任何时刻只有一个线程能够访问某个资源或代码段。
以下是使用互斥锁的基本步骤:
- 定义一个互斥锁。
- 初始化互斥锁。
- 加锁,在访问共享资源或代码段之前。
- 解锁,在完成访问共享资源或代码段之后。
下面是一个简单的例子,展示了如何在Linux中使用互斥锁:
#include <pthread.h>
#include <stdio.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 定义并初始化互斥锁
void* thread_function(void* arg) {
pthread_mutex_lock(&mutex); // 加锁
// 临界区 - 访问共享资源
printf("Thread ID: %lu\n", pthread_self());
// 临界区结束
pthread_mutex_unlock(&mutex); // 解锁
return NULL;
}
int main() {
pthread_t thread1, thread2;
// 创建线程
pthread_create(&thread1, NULL, &thread_function, NULL);
pthread_create(&thread2, NULL, &thread_function, NULL);
// 等待线程完成
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
return 0;
}
在这个例子中,thread_function
是每个线程要执行的函数,它包含了一个临界区(通过 printf
输出线程ID)。互斥锁 mutex
被用来确保同一时刻只有一个线程可以执行临界区中的代码。
请注意,在实际编程中,互斥锁的加锁和解锁应当放在 try
和 catch
块中,以确保即使在发生异常的情况下也能正确解锁,防止死锁的发生。
评论已关闭