比如有一个类:
class entity
{
public:
int x;
void set_x(int x_)
{
//lock1
x = x_;
}
};vector <entity*> entities;void func()
{
while(1)
{
//lock2
entity* ent = entities[0]; //lock3
ent-> set_x(rand());
}
}int main()
{
entity *ent = new entity();
entities.push_back(ent); thread t1(func());
thread t2(func()); t1.run();
t2.run();
}上面程序的有目的是要修改保存在vector中的对象指针指向的成员变量,那我是应该在vector上,还是对象指针上,还是对象成员变量上加锁呢?
class entity
{
public:
int x;
void set_x(int x_)
{
//lock1
x = x_;
}
};vector <entity*> entities;void func()
{
while(1)
{
//lock2
entity* ent = entities[0]; //lock3
ent-> set_x(rand());
}
}int main()
{
entity *ent = new entity();
entities.push_back(ent); thread t1(func());
thread t2(func()); t1.run();
t2.run();
}上面程序的有目的是要修改保存在vector中的对象指针指向的成员变量,那我是应该在vector上,还是对象指针上,还是对象成员变量上加锁呢?
解决方案 »
- 如何设置对话条的大小及位置??
- 怎样用SetTimer封装一个计时器?
- [200]分很急的请问各位一个消息处理问题:PreTranslateMessage(MSG *pMsg),很急的请求帮助,谢谢!有两个同样的问题,解决马上结题;
- 如何缩放窗口或按钮
- 多线程问题!
- 关于在网页中嵌入Activex控件的问题!
- Invoke调用错误!uArgError返回错误信息如何判断出错原因?up有分!在线等候...
- 怎么使用数据库和SQL语句??
- cricheditctl控件求助
- to 版主:能不能把“有人参与讨论这个问题,请用EMail通知我”默认值取NULL?(内空)
- 新手请教关于导入XML文件的问题
- 编译问题,error LNK2001: unresolved external symbol _main
不过我觉得多线程下应该对共享变量加锁,所以上面的程序中我觉得应该对entities, entity::x这两个加锁,及lock1和lock3我在这里也有提问
http://topic.csdn.net/u/20121020/20/8902774e-c1cf-4f9f-b3ea-f179c83d88af.html?seed=985654257&r=79949038#r_79949038