C++对象的线程安全性。

招RD和QA 2004-04-29 11:12:01
最近忽然有一个想法,就是C++对象本身是线程安全的吗?

e.g. pesudo code

class A
{
public:
void Set( int i )
{
lock lk;
this->i = i;
}
public:
int i;
};

大概有这么一个类,我想问的是。

t( A &a )
{
a.Set( 10 );
}

main( )
{
A a;
CreateThread( t );
a.Set( 5 );
wait(t);
}

因为A对象本身提供了线程安全的机制来访问其内部成员,但是由于t()和main()都访问了同一个对象a,而且是通过引用(即指针)访问,这样做是安全的吗?还是需要另一个mutex?
...全文
105 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kingxinyu 2004-05-09
  • 打赏
  • 举报
回复
up
招RD和QA 2004-05-08
  • 打赏
  • 举报
回复
继续up
Jinhao 2004-05-08
  • 打赏
  • 举报
回复
在这里需要看你的lock怎么写了
在lock里Double-Checked Locking 是非常必要的
招RD和QA 2004-04-30
  • 打赏
  • 举报
回复
Nobody
天一 2004-04-29
  • 打赏
  • 举报
回复
up
Wolf0403 2004-04-29
  • 打赏
  • 举报
回复
http://sourceforge.net/projects/ptypes 里面有一个 rwlock,很不错的:)
读取时候允许多线程同步进入读取锁定状态,写入时候只允许一个线程进入。
设计很精巧的。
AutoAsm 2004-04-29
  • 打赏
  • 举报
回复
不需要,class只需要提供锁自己的成员(一般是重要成员,比如list)即可
招RD和QA 2004-04-29
  • 打赏
  • 举报
回复

如果Set()是个虚函数呢?

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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