Linux下互斥量加锁与解锁操作的C代码实现
来源:互联网 发布:spss数据统计分析软件 编辑:程序博客网 时间:2024/06/08 10:15
转自: http://blog.csdn.net/zhouzhaoxiong1227/article/details/45599463
一、概述
在实际的软件程序中,由于代码量较大,函数之间的调用关系较为复杂,因此对于某些全局变量的操作要格外小心。在程序中,一般采用互斥量加锁的方式来保证对全局变量的操作的唯一性。
本文详细介绍了Linux下互斥量加锁与解锁操作的C代码实现,为相关的软件开发工作的开展提供了有益的参考。
二、加锁与解锁函数及时间结构体介绍
1.加锁函数pthread_mutex_timedlock
函数原型:int pthread_mutex_timedlock(pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime);
函数说明:pthread_mutex_timedlock函数用于将mutex表示的互斥量锁住,如果该互斥量已经上锁,那么该函数会一直等到该互斥量解锁,等待时长为abstime指定的时间。
函数返回值:返回0表示加锁成功,其它表示加锁失败。
2.解锁函数pthread_mutex_unlock
函数原型:int pthread_mutex_unlock(pthread_mutex_t *mutex);
函数说明:pthread_mutex_unlock函数用于将mutex表示的互斥量释放掉。
函数返回值:返回0表示加锁成功,其它表示加锁失败。
3.timespec结构体
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
该结构体有两个成员变量:tv_sec表示秒,tv_nsec表示纳秒。
4.timeval结构体
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
该结构体有两个成员变量:tv_sec表示秒,tv_usec表示微秒。
三、C程序实现
本程序命名为“LockAndUnlock.c”,其中“MutexLock”为加锁函数,“MutexUnLock”为解锁函数。
具体代码如下:
- 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
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 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
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
四、文件编译及运行结果
在linux下执行“gcc -g -pthread -o LockAndUnlock LockAndUnlock.c”或“gcc LockAndUnlock.c -o LockAndUnlock -lpthread”命令,生成“LockAndUnlock”。然后再执行“LockAndUnlock”命令,程序运行结果如下:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
五、总结
本文给出了Linux下互斥量加锁与解锁操作的C代码实现。程序中的“MutexLock”和“MutexUnLock”函数可作为API供其它需要进行类似操作的程序调用。
- Linux下互斥量加锁与解锁操作的C代码实现
- Linux下互斥量加锁与解锁操作的C代码实现
- SM01 事务代码的加锁以及解锁
- PHP加锁解锁操作
- linux c复习:文件操作(文件锁:加锁以及解锁)
- 加锁解锁PHP实现
- c++实现加锁解锁
- 加锁解锁PHP实现
- 注册表加锁与解锁
- 自动加锁与解锁
- NSLock加锁与解锁
- 文件的加锁解锁
- unix c文件加锁解锁
- linux文件加锁及解锁
- oracle用户解锁与加锁
- oracle中加锁与解锁
- Oracle 用户加锁与解锁
- 屏幕解锁加锁的监听
- 搞不清楚「CC」和「BCC」嗎?四個技巧教你寫出一封專業的工作email
- 二叉搜索树之—AVL
- 机器学习代码分析之一线性回归
- 仿淘宝sku组合
- WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows R
- Linux下互斥量加锁与解锁操作的C代码实现
- 为什么json, data.name为undefined
- jsoup
- Python中如何解决ImportError:No Module Named arcpy问题
- Java 抽象类和接口的相同点和不同点
- 初尝Git
- QT 遍历一个文件夹下的所有图片。
- 9.通过服务名和协议名获取相关的服务信息
- PHP通过CURL访问HTTPS链接示例