先上代码:
#include<iostream>
#include<pthread.h>
class Safe_data
{
private:
int _data;
pthread_mutex_t _mutex;
public:
Safe_data();
Safe_data(const int& data);
~Safe_data();
void Set(const int&);
};
Safe_data::Safe_data()
{
std::cerr<<"Safe_data() 1"<<std::endl;
pthread_mutex_init(&_mutex,NULL); // 1
std::cerr<<"Safe_data() 2"<<std::endl;
}
Safe_data::Safe_data(const int& data)
{
std::cerr<<"Safe_data(...)"<<std::endl;
Safe_data();
//pthread_mutex_init(&_mutex,NULL); // 2
Set(data);
}
Safe_data::~Safe_data()
{
pthread_mutex_destroy(&_mutex);
}
void Safe_data::Set(const int& data)
{
std::cerr<<"Set 1"<<std::endl;
pthread_mutex_lock(&_mutex);
_data=data;
std::cerr<<"Set 2."<<std::endl;
pthread_mutex_unlock(&_mutex);
std::cerr<<"Set 3"<<std::endl;
}
using namespace std;
int main()
{
Safe_data data(5);
std::cerr<<"done"<<endl;
}
#include<iostream>
#include<pthread.h>
class Safe_data
{
private:
int _data;
pthread_mutex_t _mutex;
public:
Safe_data();
Safe_data(const int& data);
~Safe_data();
void Set(const int&);
};
Safe_data::Safe_data()
{
std::cerr<<"Safe_data() 1"<<std::endl;
pthread_mutex_init(&_mutex,NULL); // 1
std::cerr<<"Safe_data() 2"<<std::endl;
}
Safe_data::Safe_data(const int& data)
{
std::cerr<<"Safe_data(...)"<<std::endl;
Safe_data();
//pthread_mutex_init(&_mutex,NULL); // 2
Set(data);
}
Safe_data::~Safe_data()
{
pthread_mutex_destroy(&_mutex);
}
void Safe_data::Set(const int& data)
{
std::cerr<<"Set 1"<<std::endl;
pthread_mutex_lock(&_mutex);
_data=data;
std::cerr<<"Set 2."<<std::endl;
pthread_mutex_unlock(&_mutex);
std::cerr<<"Set 3"<<std::endl;
}
using namespace std;
int main()
{
Safe_data data(5);
std::cerr<<"done"<<endl;
}