c++ atomic函数_C|并发编程|互斥锁实现
OS:Three Easy Pieces
Lockpages.cs.wisc.edu
导语
锁Lock,正如现实中的锁一样,决定了对于资源的访问权。在并发编程中,由于资源共享的缘故,一个线程中的write操作有可能影响到另一个线程的read操作。
部分严格的程序员为了杜绝这种side effect,选择了Functional Programming,以确保完全的Thread Safety。而在正常的结构化编程中,程序员倾向于使用锁,防止意料之外的Side Effect。
锁控制了一个资源只能被一个线程同时访问,因此有效避免了多线程情况下的读写导致的异常输出。
自旋Spinning锁
typedef struct __lock_t {
int flag; } lock_t;
void init(lock_t *mutex) {
// 0 -> lock is available, 1 -> held
mutex->flag = 0;
}
void lock(lock_t *mutex) {
while (mutex->flag == 1) // TEST the flag Line a
; // spin-wait (do nothing)
mutex->flag = 1; // now SET it! Line b
}
void unlock(lock_t *mutex) {
mutex->flag = 0;
这是一个最基本的版本,当flag置1时,锁被获
版权声明:本文为weixin_30896727原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。