首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

加锁的函数里返回值,该如何处理

2012-08-28 
加锁的函数里返回值想在加锁的函数里返回值C/C++ codeint count 0// 这样是绝对不行的。int f() {pthrea

加锁的函数里返回值
想在加锁的函数里返回值

C/C++ code
int count = 0;// 这样是绝对不行的。int f() {    pthread_mutex_lock(&mutex_);    return count++;    pthread_mutex_unlock(&mutex_);}// 这样还是不行。int f() {    pthread_mutex_lock(&mutex_);    int ret = count++;    pthread_mutex_unlock(&mutex_);    return ret;}// 这样是可以的。int f(int& val) {    pthread_mutex_lock(&mutex_);    val = count++;    pthread_mutex_unlock(&mutex_);}// 这样也是可以的。int f() {    MutexLockGuard lock(mutex_); // RAII     return count++;}


现在求其它可行方案,开始吧 。。。












哎,苦逼的王皓又输了。。。

[解决办法]
你不是有方案了么
[解决办法]
喜欢最后一个,
不用考虑unlock问题

[解决办法]
pthread_mutex_unlock(&mutex_); 这个是必须要执行的,就是说在执行它之前不能有返回值。
但是执行它之后 在返回的话就可能被修改。

貌似没其他方案了
[解决办法]
额 把count和一个mutex放到一个class里面吧。 mutex是不是要弄成静态成员就看你自己需要了。
[解决办法]
C/C++ code
// 这样还是不行。int f() {    pthread_mutex_lock(&mutex_);    int ret = count++;    pthread_mutex_unlock(&mutex_);    return ret;}// 这样是可以的。int f(int& val) {    pthread_mutex_lock(&mutex_);    val = count++;    pthread_mutex_unlock(&mutex_);}// 这样也是可以的。int f() {    MutexLockGuard lock(mutex_); // RAII     return count++;}
[解决办法]
返回一个副本呗
[解决办法]
int f() {
return __sync_add_and_fetch(count);
}

[解决办法]
探讨

int f() {
return __sync_add_and_fetch(count);
}

[解决办法]
C/C++ code
void f(int (*setcount)(int)) {    MutexLockGuard lock(mutex_); // RAII    (*setcount)(++count) }
[解决办法]
探讨

C/C++ code

void f(int (*setcount)(int)) {
MutexLockGuard lock(mutex_); // RAII
(*setcount)(++count)
pthread_mutex_unlock(&mutex_);
}


单纯改变数目这种方式属于脱裤子放屁,如果有一些复杂操作什么的可以考虑一下。

[解决办法]
我喜欢第一个,比效霸气也标新立异啊

[解决办法]
int f() {
MutexLockGuard lock(mutex_); // RAII 
return count++;
}

这样最安全,锁的目的就是为了保证同时只有一个线程访问。
[解决办法]
总之就是确保返回之前正确解锁就是可以了

热点排行