//----------------------------------------------------- // int-pe.cc: interruptor + prioridad escritores //----------------------------------------------------- #include "interruptor.h" #include #include #include #include #include #include //----------------------------------------------------- using namespace std::literals; //----------------------------------------------------- const size_t N = 1; //----------------------------------------------------- std::latch latch(2 * N); std::mutex no_lectores, no_escritores; interruptor lectura, escritura; //----------------------------------------------------- void seccion_critica(char c) { for (char i = 0; i < 10; ++i) std::cout << c; std::cout << '\n'; } //----------------------------------------------------- void lector(char c) { latch.arrive_and_wait(); while (true) { no_lectores.lock(); lectura.lock(no_escritores); no_lectores.unlock(); seccion_critica(c); lectura.unlock(no_escritores); } } //----------------------------------------------------- void escritor(char c) { latch.arrive_and_wait(); while (true) { escritura.lock(no_lectores); no_escritores.lock(); seccion_critica(c); no_escritores.unlock(); escritura.unlock(no_lectores); } } //----------------------------------------------------- int main() { for (size_t i = 0; i < N; ++i) { std::thread(lector, '0' + i).detach(); std::thread(escritor, 'a' + i).detach(); } std::this_thread::sleep_for(10ms); } //-----------------------------------------------------