FreeRTOS的互斥锁(互斥信号量)使用

互斥锁的作用

互斥锁(mutex)的作用是同步对共享资源的访问,确保在任意时刻只有一个线程可以访问共享资源,从而避免竞争条件(race condition)的发生。

具体来说,互斥锁有以下几个作用:

  1. 保护共享资源:当多个线程同时访问共享资源时,互斥锁可以确保只有一个线程可以访问该资源,避免出现数据不一致或错误的情况。

  2. 防止竞态条件:互斥锁可以用来解决竞态条件(race condition)的问题。竞态条件指的是当多个线程同时执行时,最终的结果取决于线程的执行顺序。通过使用互斥锁,可以防止竞态条件的发生,保证结果的可靠性。

  3. 实现线程互斥:互斥锁可以用来实现对共享资源的互斥访问,即同一时刻只有一个线程可以访问共享资源,其他线程需要等待互斥锁释放才能继续执行。

总的来说,互斥锁的作用是确保多个线程对共享资源的安全访问,避免出现数据竞争和不一致的情况。

互斥锁的使用

需要引用的头文件

#include "FreeRTOS.h" 
#include "task.h" 
#include "semphr.h"

定义声明

QueueHandle_t MutexSemaphore;

创建

在main函数中创建

MutexSemaphore = xSemaphoreCreateMutex();

使用

一般来说是为了解决资源争抢问题,所以用的情况是:

A要用B特有的资源,比如说数组、结构体,A用的时候B不能用,B用的时候A不能用

下面的这个例子就是page_update()内含cont_update(),而cont_update被另外一个线程调用的情况。

void test()
{
	xSemaphoreTake(MutexSemaphore, portMAX_DELAY); /* 获取互斥信号量 */
	cont_update();
	xSemaphoreGive(MutexSemaphore); /* 释放互斥信号量 */
}

void task1()
{
	task1_init();
	while(1)
	{
		xSemaphoreTake(MutexSemaphore, portMAX_DELAY); /* 获取互斥信号量 */
		page_update();
		xSemaphoreGive(MutexSemaphore); /* 释放互斥信号量 */
	}
}

void task2()
{
	task2_init();
	while(1)
	{
		...(省略若干函数逻辑)
		...
		...
		test();
		...
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值