社区
进程/线程/DLL
帖子详情
多线程访问全局的结构体数组
xuebond
2010-01-08 04:36:43
请教各位一个问题,多线程访问同一个全局的结构体数组中的不同元素,会不会产生线程同步问题。
...全文
464
14
打赏
收藏
多线程访问全局的结构体数组
请教各位一个问题,多线程访问同一个全局的结构体数组中的不同元素,会不会产生线程同步问题。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zyq5945
2010-01-09
打赏
举报
回复
[Quote=引用 10 楼 xuebond 的回复:]
zyq5945,我的意思是:一个线程访问m_SensorInf[i].DealMode,
另一个线程访问m_SensorInf[i].GetMode
这样算是内存重叠吗?会不会发生访问冲突?请指教,谢谢
[/Quote]
内存不重叠,如LS所说,如果你的变量就赋值一次(以后不修改值),以后只是读取的话可以不用同步机制
但m_SensorInf[i].GetMode如果在这个线程中读取,在另外的线程中会被修改的话最好加同步机制
saintwang
2010-01-09
打赏
举报
回复
只有读操作,不会冲突的。
kone123
2010-01-09
打赏
举报
回复
不会的
sb3day
2010-01-08
打赏
举报
回复
[Quote=引用 10 楼 xuebond 的回复:]
zyq5945,我的意思是:一个线程访问m_SensorInf[i].DealMode,
另一个线程访问m_SensorInf[i].GetMode
这样算是内存重叠吗?会不会发生访问冲突?请指教,谢谢
[/Quote]只是访问,不会冲突,冲突就是一个线程删改了数据的时候,另一个线程访问数据造成错误
xuebond
2010-01-08
打赏
举报
回复
zyq5945,我的意思是:一个线程访问m_SensorInf[i].DealMode,
另一个线程访问m_SensorInf[i].GetMode
这样算是内存重叠吗?会不会发生访问冲突?请指教,谢谢
zyq5945
2010-01-08
打赏
举报
回复
多个线程可能会同时访问同一个结构体,但是绝对不会访问同一个的结构体里的相同的变量
不知道你是怎么保证不会访问同一个的结构体里的相同的变量.如果真能保证可以不加同步机制.
同一个内存地址:一个变量,它的引用和它的指针都会指向同一个内存地址.
内存地址不重叠:比如一个你这一次要访问4个字节,下一次访问的是这4个字节的后3个字节就是内存重叠.
xuebond
2010-01-08
打赏
举报
回复
nintendo_dskay,“同一段内存”如何理解?一个字节?,谢谢
zyq5945,我这里一个线程里要访问同一个结构体数组的很多元素,而且毫无疑问其它的线程也要访问这些元素,但是重要的是:虽然多个线程可能会同时访问同一个结构体,但是绝对不会访问同一个的结构体里的相同的变量。
如:
m_SensorInf[i].DealMode 这里m_SensorInf[i]是结构体数组的一个元素,DealMode是结构体里的一个变量。
nintendo_dskay
2010-01-08
打赏
举报
回复
对同一段内存进行多线程读写操作才需要同步
lllyyy2403
2010-01-08
打赏
举报
回复
[Quote=引用 4 楼 zyq5945 的回复:]
一个线程只对应访问一个结构体数组元素就不用考虑同步问题.
[/Quote]
---是的。
JonathanS666
2010-01-08
打赏
举报
回复
看看有没有写操作
zyq5945
2010-01-08
打赏
举报
回复
一个线程只对应访问一个结构体数组元素就不用考虑同步问题.
sandyandy
2010-01-08
打赏
举报
回复
[Quote=引用 1 楼 zyq5945 的回复:]
只要不是访问同一个内存地址,或者访问的内存地址不重叠就不会.
[/Quote]
很正确, 或者不同读写同一个地址
尘雨
2010-01-08
打赏
举报
回复
只是读取,不会产生线程同步问题
zyq5945
2010-01-08
打赏
举报
回复
只要不是访问同一个内存地址,或者访问的内存地址不重叠就不会.
CUDA学习笔记(四)
因为在
结构体数组
中,一个元素内部是一个结构体,存放着不同的数据,那么整个
结构体数组
在内存中的存放就会是以下排列方式abc abc abc abc,要
访问
该
结构体数组
中的全部a元素时,就无法满足合并内存
访问
,造成带宽浪费。使用固定内存会导致主机端的性能降低,但其实在数据传输的时候使用cudamemcpy时,主机和设备端时同步的,也就是主机端必须等待设别断数据传输完毕才能向下运行,所以尽管主机端性能会降低,但在大数据传输的时候,固定内存还是比较适用的。寄存器:寄存器是距离计算核心最近的内存,读写速度是最快的。
CUDA学习之
全局
内存--part2
文章目录4.3 内存
访问
模式4.3.1 对齐与合并
访问
读取粒度为何是32字节
访问
方式决定读取粒度对齐内存
访问
与合并内存
访问
4.3.2
全局
内存读取内存加载
访问
模式1. 缓存加载(启用一级缓存)2. 没有缓存的加载 (禁用一级缓存)3. 非对齐读取示例禁用一级缓存对
全局
内存加载性能有何影响4. 只读缓存4.3.3
全局
内存写入4.3.4
结构体数组
与数组结构体AoS示例SoA示例4.3.5 性能调整展开技术增大并行性最大化带宽利用率4.4 核函数可达到的带宽4.4.1 内存带宽4.4.2 矩阵转置问题1. 为
走好每一步,基于C实现机器人运动学建模与标定、运动规划、轨迹规划算法
之前所有工都是基于Matlab/Simulink完成,现在考虑将之前关于运动学建模/标定/轨迹规划的工作转换为C。 涉及到到的知识点:二维数组与指针、
结构体数组
与指针、动态内存分配、函数指针、
全局
变量、
多线程
与线程锁、结构体与指针函数实现类、顺序循环队列读写操作、VS下使用OpenGL实时(双缓冲技术)绘制散点图等,以及编译编辑平台的使用:VM虚拟机下Linux gcc/g++、Win10下VisualStudio2010调试、SourceInsight4.0编辑;
【CUDA 基础】4.3 内存
访问
模式
Abstract: 本文介绍内存的
访问
过程,也就是从应用发起请求到硬件实现的完整操作过程,这里是优化内存瓶颈的关键之处,也是CUDA程序优化的基础。 Keywords: 内存
访问
模式,对齐,合并,缓存,
结构体数组
,数组结构体 开篇废话 “物有本末,事有终始,知所先后,则近道矣” ——《大学·大学之道章》 这句话出自大学,大学非我们现在上的大学,而我不知道我们现在的大学...
聊聊Go语言的
全局
变量
注:上面篇首配图的底图由百度文心一格[1]生成。C语言是Go语言的先祖之一,Go继承了很多C语言的语法与表达方式,这其中就包含了
全局
变量,虽然Go在其语法规范[2]中并没有直接给出
全局
变量的定义。但是已经入门Go的童鞋[3]都知道,在Go中包的导出变量(exported variable)起到的就是
全局
变量的作用。Go包导出变量与C的
全局
变量在优缺点与使用方式也有相似之处。我是C程序员出身[4],...
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章