synchronized
en Java
puede garantizar la seguridad del hilo. ¿Qué hay de C++
?¿Qué es la función de correspoding para sincronizar en java?
¡Gracias!
synchronized
en Java
puede garantizar la seguridad del hilo. ¿Qué hay de C++
?¿Qué es la función de correspoding para sincronizar en java?
¡Gracias!
Utiliza el siguiente en C++ 11:
mutex _mutex;
void f()
{
unique_lock<mutex> lock(_mutex);
// access your resource here.
}
Uso impulso si usted no tiene un compilador de C++ 11 todavía.
C++ no tiene subprocesamiento o sincronización incorporados (todavía), tiene que usar librerías para eso. Boost.Thread
es una buena biblioteca portátil que está diseñada para ser compatible con el proposed threading facilities in C++0x.
No hay palabra clave en C++ 03 equivalente a synchronized
en Java. Pero puede usar Mutex para garantizar la seguridad del hilo.
También puede consultar: A "synchronized" statement for C++ like in Java Con este método puede usar sincronización como en Java.
A pesar de esta pregunta ha sido contestada ya, por la idea de this artículo hice mi versión de synchronized
de palabras clave usando la biblioteca solo estándar (C++ 11) Objetos:
#include <mutex>
#define synchronized(m) \
for(std::unique_lock<std::recursive_mutex> lk(m); lk; lk.unlock())
puede probarlo gustaría:
#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;
}
Esto es sólo una aproximación de synchonized
de palabras clave de Java, pero funciona. Sin ella el método del ejemplo anterior sayHello
puede implementarse como el accepted answer dice:
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;
}
C++ dice nada acerca de las discusiones. Deberá confiar en el soporte de la biblioteca. –