LINUX.ORG.RU

История изменений

Исправление pavlick, (текущая версия) :

Можешь показать на примере? Как это закостылить на расте:

#include <thread>
#include <iostream>
#include <shared_mutex>
using namespace std;

class S {
	shared_mutex mtx;
	unsigned i = 0;
public:
	unsigned sh_fn() {
		shared_lock lck{mtx};
		return i;
	}
	void uq_fn() {
		lock_guard lck{mtx};
		++ i;
	}
}s;

int main() {
	thread r{[](){
		while (true)
			cout << s.sh_fn() << endl,  this_thread::sleep_for(1s);
	}};
	thread r2{[](){
		while (true)
			cout << s.sh_fn() << endl,  this_thread::sleep_for(1s);
	}};
	thread w{[](){
		while (true)
			s.uq_fn(),  this_thread::sleep_for(1s);
	}};
	r.join(), w.join(), r2.join();
	return 0;
}

Исходная версия pavlick, :

Можешь показать на примере? Как это закостылить на расте:

#include <thread>
#include <iostream>
#include <shared_mutex>
using namespace std;

class S {
	shared_mutex mtx;
	unsigned i = 0;
public:
	unsigned sh_fn() {
		shared_lock lck{mtx};
		return i;
	}
	void uq_fn() {
		lock_guard lck{mtx};
		++ i;
	}
}s;

int main() {
	thread r{[](){
		while (true)
			cout << s.sh_fn() << endl,  this_thread::sleep_for(1s);
	}};
	thread w{[](){
		while (true)
			s.uq_fn(),  this_thread::sleep_for(1s);
	}};
	r.join(), w.join();
	return 0;
}