Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Synchro#1
Language:
Ada
Assembly
Bash
C#
C++ (gcc)
C++ (clang)
C++ (vc++)
C (gcc)
C (clang)
C (vc)
Client Side
Clojure
Common Lisp
D
Elixir
Erlang
F#
Fortran
Go
Haskell
Java
Javascript
Kotlin
Lua
MySql
Node.js
Ocaml
Octave
Objective-C
Oracle
Pascal
Perl
Php
PostgreSQL
Prolog
Python
Python 3
R
Rust
Ruby
Scala
Scheme
Sql Server
Swift
Tcl
Visual Basic
Layout:
Vertical
Horizontal
// Реализовать доступ к данным класса Storage в режиме "один писатель, много читателей", // гарантирующий отсутствие взаимных блокировок и коллизий при вставках/модификациях/использовании данных. // #include <iostream> #include <vector> #include <boost/thread.hpp> typedef boost::shared_lock<boost::shared_mutex> read_lock; typedef boost::unique_lock<boost::shared_mutex> write_lock; struct U0 { boost::shared_mutex mylock; // ... // some data }; struct U1 { boost::shared_mutex mylock; boost::weak_ptr<U0> u0; // ... // some data }; class Storage { boost::shared_mutex mylock; std::vector<boost::shared_ptr<U0>> u0s; std::vector<boost::shared_ptr<U1>> u1s; public: // Доступ на чтение/запись к Storage // ... <lock_type>put(); // Блокируется на чтение/запись U0 // ... get<lock_type>(int idx); // Блокируется на чтение/запись (U1, U0) // ... get<lock_type>(int idx); // Вставка U0 // ... put(const U0&); // Вставка (U1[, U0]) // ... put(const U1&); }; int main() { return 0; }
g++
Show compiler warnings
[
+
] Compiler args
[
+
]
Show input
Compilation time: 4.04 sec, absolute running time: 0.16 sec, cpu time: 0.08 sec, memory peak: 3 Mb, absolute service time: 4,22 sec
latest
|
history