互斥锁是一种保护共享资源的方法。当一个线程拥有互斥锁的时候,另一个线程若是等待锁,则其就会被挂起,从而保证只有一个线程会操作共享数据。
这里的例子同样有静态锁和动态锁,其差别同之前一样,仅仅是创建和删除的方式不同。
例子中,线程2 一开始拥有锁,因为线程2的优先级高。而后线程1一开始采用等待10个tick的方式,所以线程1等锁的时候一定会超时。最后线程2 等1秒之后释放锁,然后这时线程1再次试图拥有锁,就能成功拿到锁了。
代码:
#include <rtthread.h>
void rt_init_thread_entry(void *parameter)
{
}
static struct rt_mutex static_mutex;
static rt_mutex_t dynamic_mutex = RT_NULL;
static rt_uint8_t thread1_stack[1024];
struct rt_thread thread1;
static void rt_thread_entry1(void *parameter)
{
rt_err_t result;
rt_tick_t tick;
/* static mutex demo */
rt_kprintf("thread1 try to get static mutex, wait 10 ticks.\n");
tick = rt_tick_get();
result = rt_mutex_take(&static_mutex, 10);
if (result == -RT_ETIMEOUT)
{
if (rt_tick_get() - tick != 10)
{