65,189
社区成员




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() {
pthread_mutex_lock(&mutex_);
count++;
pthread_mutex_unlock(&mutex_);
return count;
}
void f(int (*setcount)(int)) {
MutexLockGuard lock(mutex_); // RAII
(*setcount)(++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++;
}