Comment utiliser un std::mutex dans une classe de contexte

j'ai un peu de mal à l'aide de C++11 std::mutex

dans ma classe j'ai une variable appelé sémaphore de type std::mutex.

J'ai donc placé mon sémaphore.lock() et un sémaphore.unlock() avant et après ma section critique

class Database {
public:
Database(string, string, string, string);
virtual ~Database();

struct sMyHome getMyHome(void);
struct sPhysical getPhysical(int);
struct sSystemInfo getSystemInfo(void);
void commitSystemInfo(struct sSystemInfo);
struct sTSensors getTSensors(int);
struct sWireless getWireless(int);
struct sWirelessConf getWirelessConf(int);
struct sWirelessStatus getWirelessStatus(int);

private:
void queryMyHome(void);
void queryPhysical(int);
void querySystemInfo(void);
void queryTSensors(int ID);
void queryWireless(int ID);
void queryWirelessConf(int ID);
void queryWirelessStatus(int ID);
string toString(int);

struct sMyHome MyHome;
struct sPhysical Physical[4];
struct sSystemInfo SystemInfo;
struct sTSensors TSensors[32];
struct sWireless Wireless[64];
struct sWirelessConf WirelessConf[64];
struct sWirelessStatus WirelessStatus[64];

MYSQL *connection;
mutex semaphore;
};

c'est une partie du principal, où j'ai récupérer le message d'erreur:

 Database db = Database("192.168.1.10", "****", "******", "******");

mais le cross-compilateur dit

../main.cpp:8:73: error: use of deleted function 'Database::Database(const Database&)'
  Database db = Database("192.168.1.10", "root", "raspberry", "DomoHome2");
                                                                     ^
In file included from ../main.cpp:2:0:
../Database.h:79:7: note: 'Database::Database(const Database&)' is implicitly deleted      because the default definition would be ill-formed:
 class Database {
   ^
../Database.h:79:7: error: use of deleted function 'std::mutex::mutex(const std::mutex&)'
 In file included from ../Database.h:12:0,
             from ../main.cpp:2:
/Volumes/rpi-crosscompiler-toolchain/arm-none-linux-gnueabi/arm-none-linux-gnueabi/include/c++/4.8.2/mutex:128:5: error: declared here
 mutex(const mutex&) = delete;
 ^
make: *** [main.o] Error 1

et c'est mon constructeur:

Database::Database(string Address, string Username, string Password, string Database) {
//TODO Auto-generated constructor stub
connection = mysql_init(NULL);
mysql_real_connect(connection, Address.c_str(), Username.c_str(), Password.c_str(), Database.c_str(), 0, NULL, 0);
}
  • Vous essayez de copier Database objet, mais elle est non-copiable. Sans doute parce qu'il a un mutex membre de données. Je ne vois pas pourquoi le mutex doit être statique BTW.
  • Vous n'êtes pas fournir assez de votre code. Vos messages d'erreur sont impossibles à interpréter, à moins de fournir plus de code.
  • Vous n'êtes pas montrer le code, et c'est un problème dans le votre code (vérifier celui-ci). Mais de toute façon vérifier les différents verrouillage auto des fonctionnalités prévues dans les normes pour verrouiller/déverrouiller la synchronisation des éléments.
  • Ajouté plus de code, espérons que cette aide à clarifier la situation
  • L'appel d'une std::mutex semaphore ne pas en faire un. Je vous suggère d'utiliser un nom différent, dans le cas où un jour vous ajoutez une réelle sémaphore à votre programme, et quelqu'un se fait complètement embrouillé...
  • À l'aide de la norme actuelle de classes, un 'semaphore' qui serait en fait constitué à l'aide d'un la variable de condition.