Example #1
0
int main(int, char**)
{
  SHOW();
  
  boost::function<void()> fn = boost::bind(&locky, 10);
  boost::thread th(boost::bind(&lockwhile<boost::recursive_mutex>, fn, boost::ref(mtx)));
  usleep(10000);
  
  boost::recursive_mutex::scoped_lock triedlock(mtx, boost::defer_lock);
  std::cout << "try lock = " << triedlock.try_lock() << "\n";
  std::cout << "try lock = " << triedlock.try_lock() << "\n";
  std::cout << "try lock = " << triedlock.try_lock() << "\n";
  std::cout << "owns lock = " << triedlock.owns_lock() << "\n";
  std::cout << "get lock in other thread\n";
  boost::recursive_mutex::scoped_lock otherlock(mtx);
  std::cout << "GOT\ntrying again...\n";
  std::cout << "try lock = " << triedlock.try_lock() << "\n";
  std::cout << "owns lock = " << triedlock.owns_lock() << "\n";
  std::cout << "wait and join\n";
  th.join();

}
Example #2
0
		bool operator==(const MetadataListImpl& list) const {
		    std::unique_lock<std::mutex> mylock(m_mutex, std::defer_lock); // Released when out of scope
		    std::unique_lock<std::mutex> otherlock(list.m_mutex, std::defer_lock); // Released when out of scope
		    std::lock(mylock, otherlock); // Lock both, prevent deadlock
			return compareVectorsOfPointers(m_data, list.m_data);
		}