Quantcast
Channel: Linux.org.ru: Форум (тех. форум)
Viewing all articles
Browse latest Browse all 73859

c++, блокировка boost::shared_mutex

$
0
0

Имеем два варианта заблокировать шаред мьютекс. Поток блокирует мьютекс на запись, а основной поток пытается получить блокировку на чтение.

1. пробуем заблокировать через try_lock. всегда res==true

#include <boost/thread/shared_mutex.hpp>
#include <mutex>

boost::shared_mutex shared_mtx;
std::mutex mtx;

void thread_fn()
{
	shared_mtx.lock_upgrade();
	mtx.unlock();
	while (true) {
	}
}

void main() {
	mtx.lock();
	std::thread t(thread_fn);
	bool res=shared_mtx.try_lock_shared();
	t.join();
}
2. пытаемся заблокировать с ограничением по времени. тут res==false
#include <boost/thread/shared_mutex.hpp>
#include <mutex>

boost::shared_mutex shared_mtx;
std::mutex mtx;

void thread_fn()
{
	shared_mtx.lock_upgrade();
	mtx.unlock();
	while (true) {
	}
}

void main() {
	mtx.lock();
	std::thread t(thread_fn);
	bool res=shared_mtx.timed_lock(boost::get_system_time() + boost::posix_time::milliseconds(10)); 
	t.join();
}

так и должно быть или это баг такой?

 ,


Viewing all articles
Browse latest Browse all 73859

Trending Articles