多线程访问全局的结构体数组

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
  • 打赏
  • 举报
回复
只要不是访问同一个内存地址,或者访问的内存地址不重叠就不会.

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧