你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

rtos的线程同步的方法

[复制链接]
一花一世界003 发布时间:2015-2-11 10:21
大家看我前一主题帖上面的图了吧 QQ截图20150209184227.png

输出大概是这个样子,但是为什么会有乱码呢?难道是实时操作系统线程出问题了吗?
这里就要说一下显示乱码的原因了
之所以需要线程同步是因为在多线程并行执行的情况下,有可能会造成多线程同时使用同一系统资源的情况,从而造成冲突的发生,影响程序执行的正确性,在操作系统中一般使用互斥锁与信号量来实现线程同步
只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享
信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目
所以,我们可以给线程在调用时加个判断,判断的内容就是线程里面的信号量或者是互斥量。
#include "rtos.h"
#include "mbed.h"
Serial pc(USBTX,USBRX);

Mutex stdio_mutex; // Semaphore slots(1);

uint8_t theadindex[3];

long count[3];

void printstr(void const *args)

{

    while (true) {

                        stdio_mutex.lock();//slots.wait();

                        pc.printf("Hello World,My Thread Name is %d,Thread ID is %d.\n",*(uint8_t *)args,Thread::gettid());

                        count[*(uint8_t *)args-1]++;

                        stdio_mutex.unlock();//slot.release();

                        Thread::yield();

    }

}

int main()

{

    theadindex[0]=1;

    theadindex[1]=2;

    theadindex[2]=3;

    Thread thread1(printstr,(void *)theadindex,osPriorityNormal);

    Thread thread2(printstr,(void *)(theadindex+1),osPriorityNormal);

    Thread thread3(printstr,(void *)(theadindex+2),osPriorityNormal);

    while (1)

    {

                        stdio_mutex.lock();//slots.wait();

                        pc.printf("Thread1 count is %ld,Thread2 count is %ld,,Thread3 count is %ld. \n",count[0],count[1],count[2]);

                        stdio_mutex.unlock();//slot.release();

                        Thread::wait(1000);

    }
}
mbed-rtos另外还提供了一种称为Signals(信号)的精简同步模式,在这种模式下,一个线程必须等到特定的信号到来才继续,而另外一个线程则负责发送该信号
QQ截图20150211101941.png

收藏 评论10 发布时间:2015-2-11 10:21

举报

10个回答
dsjsjf 回答时间:2015-2-11 11:03:50
学习,谢谢分享
adersonl 回答时间:2015-2-11 11:37:03
看来我也要学习一下了,看起来好好玩的样子
默罕默德.ST 回答时间:2015-2-11 11:45:31
hdx.jpg
默罕默德.ST 回答时间:2015-2-11 11:45:47
aaaaaaaaa.jpg
lkl0305 回答时间:2015-2-11 12:34:41
学习下!!
蚂蚁 回答时间:2015-2-11 14:26:22
非常好,学习了一下
蚂蚁 回答时间:2015-2-11 14:26:38
非常感谢楼主的分想
北斗光寒 回答时间:2015-2-11 14:46:42
帮顶,还没有用过RTOS
dsjsjf 回答时间:2015-2-12 11:18:46
再顶一下
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版