Linux系统——多线程互斥锁

Linux系统——多线程互斥锁pthread_mutex_lock() pthread_mutex_unlock()

实现代码

#include
#include
#include
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

最后

  • 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!

你可能感兴趣的:(Linux,多线程,linux,c语言)