引入强制执行的读写锁

This commit is contained in:
2024-07-10 02:58:42 +08:00
parent 90106f5abe
commit d52f02225f
4 changed files with 222 additions and 0 deletions

View File

@@ -5,6 +5,7 @@
#include <chrono>
#include <iomanip>
#include <gtest/gtest.h>
#include <mutex/shared_mutex.h>
class RedBlackTree : public ling::RedBlackTree<int> {
protected:
@@ -28,6 +29,50 @@ auto duration = std::chrono::duration_cast<std::chrono::microseconds>(__ling_end
std::cout << text << ": " << std::fixed << std::setprecision(6) <<((double)duration.count() / 1000000) << " 秒(" << duration.count() <<" 微秒)" << std::endl;\
}while(false)
class mutex_test {
public:
int test() {
return 1;
}
int test_const() const {
return 2;
}
};
TEST(, 1) {
auto mutex = ling::shared_mutex<mutex_test>(mutex_test());
auto ptr = std::make_shared<mutex_test>();
{
auto lock = mutex.lock();
lock->test();
lock->test_const();
}
{
auto shared = mutex.lock_shared();
auto shared2 = mutex.lock_shared();
shared->test_const();
shared2->test_const();
}
{
auto lock = mutex.try_lock();
ASSERT_TRUE(lock);
auto lock_2 = mutex.try_lock();
ASSERT_FALSE(lock_2);
auto lock_3 = mutex.try_lock_shared();
ASSERT_FALSE(lock_3);
}
{
auto lock = mutex.try_lock_shared();
ASSERT_TRUE(lock);
auto lock_2 = mutex.try_lock();
ASSERT_FALSE(lock_2);
auto lock_3 = mutex.try_lock_shared();
ASSERT_TRUE(lock_3);
}
}
TEST(, ) {
std::random_device rd;