社区
非技术区
帖子详情
共享数据结构的互斥问题
sunday20060101
2012-11-09 03:33:44
最近看嵌入式操作系统的书,书上说,使用共享数据结构时,需要保证其互斥性;方法有关中断、利用信号量、禁制切换,使用测试并置位指令;
共享数据结构时,中断操作有可能对共享数据进行改写,所以要关中断;但别的任务也有可能使用该共享数据结构,造成改写,所以感觉仅仅单凭关中断是不能保证共享数据结构的互斥的;同样,单凭信号量也是不能保证共享数据结构的互斥的;这样理解对吗?
...全文
168
2
打赏
收藏
共享数据结构的互斥问题
最近看嵌入式操作系统的书,书上说,使用共享数据结构时,需要保证其互斥性;方法有关中断、利用信号量、禁制切换,使用测试并置位指令; 共享数据结构时,中断操作有可能对共享数据进行改写,所以要关中断;但别的任务也有可能使用该共享数据结构,造成改写,所以感觉仅仅单凭关中断是不能保证共享数据结构的互斥的;同样,单凭信号量也是不能保证共享数据结构的互斥的;这样理解对吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sunday20060101
2012-12-06
打赏
举报
回复
嗯,最近有重新理解了一下,书上说的是对的,应该是我原来的理解有问题。
雲天之巔
2012-12-03
打赏
举报
回复
以前学习学习操作系统时这个只学到了 互斥锁 和 信号量。 信号量是让这个数据只能被几个人访问,但一般不是一个人,所以这样就不能保证了,个人理解是这样。
共享
数据的线程
互斥
在多线程共存的环境下,统一进程间的线程往往会
共享
进程数据,这些数据具有临界资源的特征,即在一个时刻只允许一个线程对其访问,这样的数据要求线程对其进行
互斥
访问。
所谓
互斥
,实质上就是排他性。线程
互斥
运行指的是当多个线程要使用某一
共享
资源时,任何时刻只允许一个线程访问,其他需要这一
共享
资源的线程必须等待,直到该资源被释放才有机会访问。
在Java编程中,可采用synchronized关键字实现线程的
互斥
操作。Synchronized关键字用于声明在任何时刻只能有一个线
互斥
量解决多线程数据
共享
问题
在多个线程中
共享
数据时,需要注意线程安全
问题
。如果多个线程同时访问同一个变量,并且其中至少有一个线程对该变量进行了写操作,那么就会出现数据竞争
问题
。数据竞争可能会导致程序崩溃、产生未定义的结果,或者得到错误的结果。为了避免数据竞争
问题
,需要使用同步机制来确保多个线程之间对
共享
数据的访问是安全的。常见的同步机制包括
互斥
量、条件变量、原子操作等。以下是一个简单的数据
共享
问题
的示例代码如图所示,结果是小于预计的200000的,因为线程在对变量累加的时候,变量的值已经被改变了,但是却拿到了没有被改变的值。
【花雕学编程】Arduino RTOS 之
互斥
锁与
共享
数据结构
例如,在一个
共享
的计数器变量中,如果两个任务同时对其进行加 1 操作,可能会导致计数器的值只增加了 1 而不是预期的 2,这就需要合适的同步机制来维护数据的一致性。例如,任务 A 获取了
互斥
锁 1,任务 B 获取了
互斥
锁 2,然后任务 A 试图获取
互斥
锁 2,任务 B 试图获取
互斥
锁 1,这样两个任务就会陷入无限等待,导致系统死锁。例如,在一个智能家居控制系统中,一个任务负责接收用户的指令并将其存储在
共享
的结构体中,另一个任务负责读取这个结构体中的指令并控制相应的家电设备,实现了任务间的有效沟通。
C++-多线程数据
共享
问题
和
互斥
锁
文章目录线程数据
共享
问题
不变式与竞争条件避免竞争条件
互斥
锁 线程数据
共享
问题
多线程的优势之一就是线程之间可以
共享
数据,但我们需要一套规则规定哪个线程可以访问哪部分数据,什么时候可以访问,以及怎么通知其他关心该数据的线程已经更新了数据,如果不能处理好数据
共享
的
问题
,多线程的这个优势也会变为劣势。 线程间
共享
数据的所有
问题
都是因为对数据的修改,一个只读的数据不会造成任何
问题
。 不变式与竞争条件 这里要提到一个概念:不变式(invariant),意思是关于特定
数据结构
的陈述始终正确。例如:“x变量保存着列表中元
多进程
共享
内存使用
互斥
锁(包括多线程)
但是我发现 在多进程的情况下 是不能这么做的,会出
问题
的。当时心里有预感了,pthread是多线程的库 但是对于多进程 是不是就不能用多线程的库了呢?而有时候要修改一些
共享
内存的变量,为了避免冲突(因为多线程多进程情况下 都有可能会同时访问一块数据),那应该怎么做呢?可以看得出来呢,其实就是把
互斥
的操作夹在了sem_wait和sem_post之间。有个项目式多进程多线程都有的。的,无法跨进程使用。,这样
互斥
锁可以放置在
共享
内存中,供多个进程访问。其实真正的
问题
就是多进程环境中运行时,标准的。
非技术区
1,075
社区成员
6,260
社区内容
发帖
与我相关
我的任务
非技术区
硬件/嵌入开发 非技术区
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 非技术区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章