多线程中,可以同时访问一个对象的两个成员函数吗?

yueyucanyang 2008-12-07 03:12:28
在windows xp下VC6.0环境,假设有一个类A有两个成员函数func1(),func2()。启动了两个线程,将外部定义的一个对象A *a作为线程参数,请问,允许在线程1里访问a.func1()时,线程2在访问a.func2()吗?
...全文
387 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
薛定谔之死猫 2008-12-09
  • 打赏
  • 举报
回复
没问题,关键是对成员变量的操作需要提供线程安全的方法
jackzhhuang 2008-12-09
  • 打赏
  • 举报
回复
理论上可以,实际最好不要这么做,即使没有冲突,万一以后修改、扩展有冲突了,而自己有没有察觉,就麻烦了。

可以封装得更细点,或者改变策略。
cruxsky 2008-12-09
  • 打赏
  • 举报
回复
mark
sad_4978 2008-12-09
  • 打赏
  • 举报
回复
这样操作是可以的。但是有一点要注意a.func1()和a.func2()函数中如果对同一个变量进行了操作,要注意控制这个变量的原子访问。

SearchLife 2008-12-09
  • 打赏
  • 举报
回复
学习
candyice 2008-12-09
  • 打赏
  • 举报
回复
可以,但是存在资源竞争的话,就得做同步处理了
zenny_chen 2008-12-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 rookieme 的回复:]
当然可以,成员函数都得static
[/Quote]
成员函数不是static的,而是external的;即使是类函数(即类中的static函数)对于全局而言也是external的。

[Quote=引用 11 楼 jackzhhuang 的回复:]
理论上可以,实际最好不要这么做,即使没有冲突,万一以后修改、扩展有冲突了,而自己有没有察觉,就麻烦了。

可以封装得更细点,或者改变策略。
[/Quote]
如果func1与func2作为相互协作线程进行同时调用的话也完全可以,这尤其适用于多核处理器。
hongzao 2008-12-07
  • 打赏
  • 举报
回复
当然可以,不过如果那两个函数涉及到修改对象的状态(也就是会修改对象的内部的变量),那么就需要做同步处理.
zy1691 2008-12-07
  • 打赏
  • 举报
回复
肯定可以,但是操作相同或者相关的数据得记得同步
tanglongfeifei 2008-12-07
  • 打赏
  • 举报
回复
类的函数是属于类的,不是属于特定的对象而类的数据成员是属于特定的对象。
因此如果这个类的两个函数相不相干(即没对相同的变量进行操纵),就不需要进行线程同步。
否则就需要进行线程同步,如使用临界区...
rookieme 2008-12-07
  • 打赏
  • 举报
回复
当然可以,成员函数都得static
qqwx_1986 2008-12-07
  • 打赏
  • 举报
回复
当然可以 如果两个成员函数对成员变量的操作没有冲突,就放心用
如果有冲突,比一个对成员变量写,而另一个对同一个变量读,
这时你就要考虑同步的问题
sys0006 2008-12-07
  • 打赏
  • 举报
回复
如果你的两个成员函数没有对成员变量等进行操作是可以的,否则就得做同步处理。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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