Linux系统——多线程互斥锁pthread_mutex_lock() pthread_mutex_unlock()
实现代码
#include<bits/stdc++.h>
#include<pthread.h>
#include<unistd.h>
using namespace std;
const int THREAD_NUM = 5;
int value = 25;
pthread_mutex_t valueMutex = PTHREAD_MUTEX_INITIALIZER;
void* print(void *arg) {
for (int i = 0; i < 5; i++) {
pthread_mutex_lock(&valueMutex);
printf("%d\n", value--);
pthread_mutex_unlock(&valueMutex);
}
return (void*) 0;
}
int main(int argc, char const * argv[]) {
pthread_t threadId[THREAD_NUM];
int num[THREAD_NUM];
for (int i = 0; i < THREAD_NUM; i++) {
num[i] = i;
if (pthread_create(&threadId[i], NULL, print, NULL)) {
printf("Thread create error!\n");
abort();
}
}
sleep(2);
return 0;
}
注意
g++ -pthread pthreadCreateTest.cpp -o pthreadParameterTest
./pthreadParameterTest
- 互斥锁
若注释掉pthread_mutex_lock()函数和pthread_mutex_unlock(),多线程不能互斥访问共享全局变量value,多线程同时使用变量value,会导致意料之外的结果,输出顺序被打乱
pthread_mutex_lock()
- 返回值
成功则返回0,否则返回错误代码
- 函数原型
int pthread_mutex_lock(pthread_mutex_t *mutex);
参数mutex为欲加锁的互斥锁
- 功能
对互斥变量mutex加锁后,其他线程欲获得锁则会被阻塞,直到加锁线程将其释放,在上述实现中保证互斥地访问共享全局变量value
pthread_mutex_unlock()
- 返回值
成功则返回0,否则返回错误代码
- 函数原型
int pthread_mutex_unlock(pthread_mutex_t *mutex);
参数为欲解锁的互斥锁
- 功能
释放互斥锁,使其他线程可以竞争互斥锁mutex,在上述实现与pthread_mutex_lock()共同保证多线程互斥地访问共享全局变量value
输出结果
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
最后
- 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!