Singleton.h
#ifndef _SINGLETON_H_
#define _SINGLETON_H_
#include <stdio.h>
#include <pthread.h>
class Singleton
{
private:
Singleton()
{
pthread_mutex_init(&mtx,0);
}
static Singleton *p; // 根据cpp实现不同,决定是否存在
public:
static pthread_mutex_t mtx;
static Singleton* getInstance();
void func1(void);
};
#endif
Singleton.cpp
#include "Singleton.h"
#include <stdio.h>
pthread_mutex_t Singleton::mtx;
Singleton* Singleton::p = NULL;
Singleton* Singleton::getInstance()
{
pthread_mutex_lock(&mtx);
if(p == NULL)
{
p = new Singleton();
}
pthread_mutex_unlock(&mtx);
return p;
}
void Singleton::func1()
{
printf("func1\r\n");
}
Singleton.cpp
#include "Singleton.h"
#include <stdio.h>
pthread_mutex_t Singleton::mtx;
Singleton* Singleton::getInstance()
{
pthread_mutex_lock(&mtx);
static Singleton SingletonObj;
pthread_mutex_unlock(&mtx);
return &SingletonObj;
}
void Singleton::func1()
{
printf("func1\r\n");
}
main.cpp
#include "Singleton.h"
int main()
{
Singleton *t = Singleton::getInstance();
Singleton *tt = Singleton::getInstance();
printf("t = %p, tt= %p\r\n", t, tt);
}