Как показать преимущества std::shared_mutexC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как показать преимущества std::shared_mutex

Сообщение Anonymous »

Я хочу понять преимущество std::shared_mutex. Я читал, что основная особенность заключается в том, что мы можем иметь несколько читателей потоков и одного автора потоков.
Мой код

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

class NotesManager {
public:
optional getValue(size_t index) const {
shared_lock sharedLock(mutex_);
//unique_lock uniqueLock(mutex_);

if (index < notes_.size()) {
return notes_[index];
}
return std::nullopt;
}

void pushBack(const string& newNote) {
unique_lock uniqueLock(mutex_);
notes_.push_back(newNote);
}
private:
vector notes_;
mutable shared_mutex mutex_;
};

int main() {
NotesManager mgr;
vector threads;
for (int i = 0; i < 20000; ++i) {
if (i % 2 == 0) {
threads.emplace_back([i, &mgr]() {
const auto curr = std::to_string(i);
mgr.pushBack(curr);
});

} else {
threads.emplace_back([i, &mgr]() {
mgr.getValue(i);
});
threads.emplace_back([i, &mgr]() {
const auto curr = std::to_string(i);
mgr.pushBack(curr);
});
}
}
for (auto& t : threads) {
t.join();
}
}
Я протестировал код с помощьюshared_lock — результат равен

./lock_example 0,12 с. пользовательская система 4.60s 138% процессор 3.412 всего

И второй тест - заменилиshared_lock на unique_lock -- ЕЩЕ БЫСТРЕЕ:

./lock_example 0,12 с пользователь 4,18 с система 126% ЦП 3,390 всего

Результаты почти такие же< /p>
Можно ли изменить мой пример, чтобы показать преимуществаshared_lock?

Подробнее здесь: https://stackoverflow.com/questions/784 ... ared-mutex
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»