2012-11-29

аналог lock(C#) или @syncronized(ObjC) в С++

Типичное использование бустовских мютексов выглядит как

void SomeClass::SomeMethod() {
   //... some code
   {
      boost::mutex::scoped_lock lock(some_map_mutex_);
      some_map_.erase(foo);
   }
} 

Блок режет глаз и выглядит слегка чужеродно. Поэтому склепал вот такой вот велосипед

#define using_lock(mtx) for(::boost::mutex::scoped_lock lock(mtx), *flag = &lock; flag; flag = 0)

Использовать так


using_lock(some_map_mutex_) {
   some_map_.erase(foo);
}

Комментариев нет:

Отправить комментарий