-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path4-11mutexattr.c
More file actions
54 lines (52 loc) · 1.38 KB
/
4-11mutexattr.c
File metadata and controls
54 lines (52 loc) · 1.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
int main(int argc, const char *argv[])
{
/*定义互斥锁*/
pthread_mutex_t mutex;
if(argc < 2){
printf("input mutex type\n");
return -1;
}
/*定义互斥锁属性*/
pthread_mutexattr_t mutexattr;
/*初始化互斥锁属性*/
pthread_mutexattr_init(&mutexattr);
/*设置互斥锁类型,error:检错互斥锁,normal:标准互斥锁,recursive:递归互斥锁*/
if(!strcmp(argv[1] , "error")){
pthread_mutexattr_settype(&mutexattr,
PTHREAD_MUTEX_ERRORCHECK);
printf("set error succes\n");
}else if(!strcmp(argv[1],"normal")){
pthread_mutexattr_settype(&mutexattr,
PTHREAD_MUTEX_NORMAL);
printf("set normal succes\n");
}else if(!strcmp(argv[1], "recursive")){
pthread_mutexattr_settype(&mutexattr,
PTHREAD_MUTEX_RECURSIVE);
printf("set recursive\n");
}
/*初始化互斥锁*/
pthread_mutex_init(&mutex ,&mutexattr);
/*第一次上锁*/
if(pthread_mutex_lock(&mutex) != 0){
printf("lock failed\n");
}else{
printf("lock succes\n");
}
/*第二次上锁*/
if(pthread_mutex_lock(&mutex) != 0){
printf("lock failed\n");
}else{
printf("lock succes\n");
}
/*加锁几次,同样也要释放几次*/
pthread_mutex_unlock(&mutex);
pthread_mutex_unlock(&mutex);
/*销毁互斥锁属性和互斥锁*/
pthread_mutexattr_destroy(&mutexattr);
pthread_mutex_destroy(&mutex);
return 0;
}