您的位置:首页 > 其它

Nuttx之互斥锁和信号量

2016-07-30 19:31 316 查看

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);

今天先记录这么点了。后续学点东西,还是会记录的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  嵌入式 操作系统