termine sirve que para otro hilos hacer funciona example espere esperar despertar como java c++ multithreading synchronization

sirve - ¿Qué es la función de correspoding para sincronizados en Java?



synchronized java example (5)

synchronized en Java puede garantizar la seguridad del hilo. ¿Qué hay de C++ ?

¡Gracias!


A pesar de que esta pregunta ya ha sido respondida, con la idea de this artículo hice mi versión de palabra clave synchronized utilizando solo objetos de biblioteca estándar (C ++ 11):

#include <mutex> #define synchronized(m) / for(std::unique_lock<std::recursive_mutex> lk(m); lk; lk.unlock())

Puedes probarlo así:

#include <iostream> #include <iomanip> #include <mutex> #include <thread> #include <vector> #define synchronized(m) / for(std::unique_lock<std::recursive_mutex> lk(m); lk; lk.unlock()) class Test { std::recursive_mutex m_mutex; public: void sayHello(int n) { synchronized(m_mutex) { std::cout << "Hello! My number is: "; std::cout << std::setw(2) << n << std::endl; } } }; int main() { Test test; std::vector<std::thread> threads; std::cout << "Test started..." << std::endl; for(int i = 0; i < 10; ++i) threads.push_back(std::thread([i, &test]() { for(int j = 0; j < 10; ++j) { test.sayHello((i * 10) + j); std::this_thread::sleep_for(std::chrono::milliseconds(100)); } })); for(auto& t : threads) t.join(); std::cout << "Test finished!" << std::endl; return 0; }

Esta es solo una aproximación de la palabra clave synchonized de Java, pero funciona. Sin él, el método sayHello del ejemplo anterior puede implementarse como dice la respuesta aceptada :

void sayHello(unsigned int n) { std::unique_lock<std::recursive_mutex> lk(m_mutex); std::cout << "Hello! My number is: "; std::cout << std::setw(2) << n << std::endl; }



No hay palabra clave en C ++ 03 equivalente a synchronized en Java. Pero puede usar Mutex para garantizar la seguridad del hilo.



Use lo siguiente en C ++ 11:

mutex _mutex; void f() { unique_lock<mutex> lock(_mutex); // access your resource here. }

Use boost si todavía no tiene un compilador de C ++ 11.