多线程怎么使用互斥锁
时间: 2024-02-09 19:13:01 浏览: 70
互斥锁是一种保护共享资源的机制,多个线程可以通过互斥锁来访问共享资源,避免多个线程同时访问共享资源导致的竞争问题。在使用互斥锁时,需要注意以下几点:
1. 初始化互斥锁:在使用互斥锁前,需要先进行初始化。可以使用 `pthread_mutex_init()` 函数来进行初始化。
2. 加锁和解锁:在访问共享资源前,需要先加锁。使用 `pthread_mutex_lock()` 函数来加锁,使用 `pthread_mutex_unlock()` 函数来解锁。加锁后,其他线程无法访问共享资源,直到当前线程解锁。
3. 避免死锁:由于互斥锁是一种独占资源的机制,如果多个线程同时请求多个互斥锁,很容易导致死锁。为了避免死锁,需要对多个互斥锁的加锁顺序进行协调,保证所有线程按照相同的顺序请求互斥锁。
下面是一个使用互斥锁的简单示例代码:
```c++
#include <pthread.h>
#include <stdio.h>
pthread_mutex_t mutex;
void *thread_func(void *)
{
pthread_mutex_lock(&mutex); // 加锁
printf("Thread %ld is running\n", pthread_self());
pthread_mutex_unlock(&mutex); // 解锁
return NULL;
}
int main()
{
pthread_t threads[10];
pthread_mutex_init(&mutex, NULL); // 初始化互斥锁
for (int i = 0; i < 10; i++) {
pthread_create(&threads[i], NULL, thread_func, NULL);
}
for (int i = 0; i < 10; i++) {
pthread_join(threads[i], NULL);
}
pthread_mutex_destroy(&mutex); // 销毁互斥锁
return 0;
}
```
在上面的代码中,我们创建了 10 个线程,每个线程都会尝试获取互斥锁,打印自己的线程 ID,然后释放互斥锁。由于互斥锁的存在,每次只有一个线程能够获取到互斥锁,其他线程需要等待前一个线程释放互斥锁后才能获取到互斥锁。
阅读全文