Tag: readwritelock

你将如何在C ++ 11中实现自己的读写器locking?

我有一套数据结构,需要使用读写器锁保护。 我知道boost :: shared_lock,但我想有一个使用std :: mutex,std :: condition_variable和/或std :: atomic的自定义实现,以便我可以更好地理解它是如何工作的(并稍后调整它) 。 每个数据结构(可移动,但不可复制)将从一个称为Commons的类inheritance,该类封装了locking。 我想公共界面看起来像这样: class Commons { public: void read_lock(); bool try_read_lock(); void read_unlock(); void write_lock(); bool try_write_lock(); void write_unlock(); }; …所以它可以被一些公开的inheritance: class DataStructure : public Commons {}; 我正在写科学的代码,通常可以避免数据竞赛; 这个锁主要是防止我以后可能会犯的错误。 因此我的优先级是低的读取开销,所以我不会妨碍正确运行的程序太多。 每个线程都可能运行在自己的CPU内核上。 你能告诉我(伪代码是好的)读者/写作者锁? 我现在所拥有的应该是防止作家饥饿的变种。 到目前为止,我的主要问题是read_lock在检查read是否安全以实际递增读取器计数之间的差距,之后write_lock知道要等待。 void Commons::write_lock() { write_mutex.lock(); reading_mode.store(false); while(readers.load() > 0) {} } void […]