由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - scoped lock的问题
相关主题
c++ interview: iterator 和 pointer区别?C++ template function一个问题
C++ vector 一边遍历一边删const_reverse_iterator和reverse_iterator有什么区别? (转载)
interview questions基本功不扎实,问个问题
[合集] 很中肯的批评 STL请推荐最好的C++/Java/Python开源代码
A C++ STL question说c++不难的欢迎来看看这个
问一个有关C++里面list的问题。C++11里list迭代器判空仍然知道具体的list对象吗?
[合集] 关于C++ STL的list的一个问题C++ class cross reference problem
C++ 用户定义exception的标准用法是什么?请教一个MS Linked List的问题
相关话题的讨论汇总
话题: lock话题: scoped话题: mutex话题: member话题: map
进入Programming版参与讨论
1 (共1页)
f******y
发帖数: 2971
1
正在改一段以前的程序,希望尽量用c++0x的STL。
以前的里面有一段是这样的
A* CLASS::function()
{
boost::recursive_mutex::scoped_lock lock(member_mutex);
.....
.....
return a;
}
这段程序我想这么改
A* CLASS::function()
{
member_mutex.lock()
.....
.....
member_mutex.unlock();
return a;
}
问题是这样改了以后我认为是不安全的, mutex解锁了以后,a就有可能被其他thread
改了。而原来的那段程序,应该一直锁到这个函数结束,所以a不可能被改了。
请问大家,我的理解对吗?
t****t
发帖数: 6806
2
what is a?

【在 f******y 的大作中提到】
: 正在改一段以前的程序,希望尽量用c++0x的STL。
: 以前的里面有一段是这样的
: A* CLASS::function()
: {
: boost::recursive_mutex::scoped_lock lock(member_mutex);
: .....
: .....
: return a;
: }
: 这段程序我想这么改

f******y
发帖数: 2971
3
这个member_mutex是用来锁住一个map的,map大约是.这个函就是按照一定
规则返回一个map里的A*
我又想了一下,看来比较安全的做法是用一个A*的local copy

【在 t****t 的大作中提到】
: what is a?
t****t
发帖数: 6806
4
isn't "a" a local copy?

【在 f******y 的大作中提到】
: 这个member_mutex是用来锁住一个map的,map大约是.这个函就是按照一定
: 规则返回一个map里的A*
: 我又想了一下,看来比较安全的做法是用一个A*的local copy

p***o
发帖数: 1252
5
No. The only problem is if there are multiple returns in function,
you have to add unlock before each of them. Moreover, if there will
be an exception throwed from inside, you are doomed. scoped_lock
is designed to address these two issues.

【在 f******y 的大作中提到】
: 正在改一段以前的程序,希望尽量用c++0x的STL。
: 以前的里面有一段是这样的
: A* CLASS::function()
: {
: boost::recursive_mutex::scoped_lock lock(member_mutex);
: .....
: .....
: return a;
: }
: 这段程序我想这么改

f******y
发帖数: 2971
6
"a" 不是一个local copy。原程序里是iter->second. iter是需要上锁的那个map的
iterator。map是这样的map.
原来程序要做的是看这个map里有没有一个指定的key为某一整数的指针。如果有就返回
这个指针,如果没有就返回空指针。
看来这种程序scoped_lock确实是最好的解决方案。因为我们总是需要在return之前
unlock,那么在unlock之后,return之前,这个被锁住的map是有可能发生变化的。

【在 t****t 的大作中提到】
: isn't "a" a local copy?
f******y
发帖数: 2971
7
又研究了一下C++11里的lock,看来lock_guard就是scoped_lock.改了这个名字让我以
为C++11里没有scoped lock呢。

【在 p***o 的大作中提到】
: No. The only problem is if there are multiple returns in function,
: you have to add unlock before each of them. Moreover, if there will
: be an exception throwed from inside, you are doomed. scoped_lock
: is designed to address these two issues.

1 (共1页)
进入Programming版参与讨论
相关主题
请教一个MS Linked List的问题A C++ STL question
reverse LL recursively问一个有关C++里面list的问题。
树的前序遍历[合集] 关于C++ STL的list的一个问题
STL感觉实在太变态了C++ 用户定义exception的标准用法是什么?
c++ interview: iterator 和 pointer区别?C++ template function一个问题
C++ vector 一边遍历一边删const_reverse_iterator和reverse_iterator有什么区别? (转载)
interview questions基本功不扎实,问个问题
[合集] 很中肯的批评 STL请推荐最好的C++/Java/Python开源代码
相关话题的讨论汇总
话题: lock话题: scoped话题: mutex话题: member话题: map