Nuttx之互斥锁和信号量
这些天开始真正的接触嵌入式的操作系统了,慢慢地激动,但是激动之余,还是有些忐忑啊,虽然是来实习的,但是自己的能力也是想提高些的,所以就静下心来,仔细的研究人家源代码,看书,查函数API。从中学到的点东西,记录下来,方便自己,也方便需要的人。我记录的通俗易懂,因为我看到浅。
先说互斥锁
使用互斥锁的流程如下:
声明一个互斥锁:
pthread_mutex_t *name;
初始化互斥锁:
int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
const pthread_mutexattr_t *restrict attr一般如果没有特殊要求可以取NULL,
接下来就是使用锁了,分两大部分:
加锁、
int pthread_mutex_lock(pthread_mutex_t *mutex);
加锁后,别人就不可以访问这些临界变量了。
解锁、
int pthread_mutex_unlock(pthread_mutex_t *mutex);
解锁后,别人就可以访问这些临界变量了。再说信号量
信号量好像要和互斥锁一起用,不知道为什么?因为信号量相关的API有用到互斥锁的。
声明信号量:
pthread_cond_t *__cond
初始化信号量:
extern int pthread_cond_init __P ((pthread_cond_t *__cond,__const pthread_condattr_t *__cond_attr));
发送信号量:
pthread_cond_signal(pthread_cond_t *cond);
等待信号量:
pthread_cond_wait(&cond, &mut);
重要的是:
等待信号和发送信号之前最好都要上锁,等待信号之后,发送信号之后,也要解锁,因为上锁和解锁是成对出现的。
eg1:
pthread_mutex_lock(&mut);
pthread_cond_signal(pthread_cond_t *cond);
pthread_mutex_unlock(&mut);
特别的与pthread_cond_signal(pthread_cond_t *cond);类似的是
pthread_cond_broadcast (pthread_cond_t *cond);
eg2:
pthread_mutex_lock(&mut);
pthread_cond_wait(pthread_cond_t *cond);
pthread_mutex_unlock(&mut);
今天先记录这么点了。后续学点东西,还是会记录的。