加锁的函数里返回值
想在加锁的函数里返回值
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++;}
// 这样还是不行。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);
}
[解决办法]
void f(int (*setcount)(int)) { MutexLockGuard lock(mutex_); // RAII (*setcount)(++count) }
[解决办法]