user-0 提问: c语言中有单例模式么？单例的演化模式 是否为，单线程--多线程--分布式

回复:
user: user-0
content: 引用 16 楼 wangyaninglm 的回复: typedef int *SINGLETON;   /* 定义自己的类型 */ SINGLETON *singleton = NULL; pthread_mutex_t singleton_lock=PTHREAD_MUTEX_INITIALIZER; SINGLETON *init_singleton(void) {     pthread_mutex_lock(&singleton_lock);     if (NULL == singleton)     {         singleton = calloc(1, sizeof(SINGLETON));         if (NULL == singleton)         {             pthread_mutex_unlock(&singleton_lock);             return NULL;         }         /*  SINGLETON 初始化 */     }     pthread_mutex_unlock(&singleton_lock);     return  singleton; }   单例适用场景：    在模块化设计时，应该遵循耦合度越低越好，但是总是存在一些公共的调用函数库或者模块，这些公共的调用函数库或者模块有以下几个特点： 1、需要被其他的模块使用 2、其他模块之间并不知道对方使用会去调用或者初始化 3、公共的调用函数库或者模块却希望在整个系统中初始化一次。 这种模块其实也很常见，     比如：线程池(整个系统希望只有那么线程，其他模块不能线程)。 再比如：内存池，整个系统中只能存在这么一个内存池。

user: user-0
content: typedef int *SINGLETON;   /* 定义自己的类型 */ SINGLETON *singleton = NULL; pthread_mutex_t singleton_lock=PTHREAD_MUTEX_INITIALIZER; SINGLETON *init_singleton(void) {     pthread_mutex_lock(&singleton_lock);     if (NULL == singleton)     {         singleton = calloc(1, sizeof(SINGLETON));         if (NULL == singleton)         {             pthread_mutex_unlock(&singleton_lock);             return NULL;         }         /*  SINGLETON 初始化 */     }     pthread_mutex_unlock(&singleton_lock);     return  singleton; }

user: user-0
content: 引用 14 楼 zjq9931 的回复:[quote=引用 13 楼 zjq9931 的回复:] [quote=引用 12 楼 wangyaninglm 的回复:] 全局唯一id和单例模式的区别联系是啥？ 全局唯一Id和单例模式的相同点：全局只操作一个实例。 全局唯一Id是全局可见的，任意一个地方都可以修改。单利模式不是全局可见，要想操作必须先通过获取语句来获取。 多线程的时候同步封装，单例模式相对的比较容易实现封装。 全局唯一Id只能通过制度来规定唯一性，不能通过编译器来限定唯一性。单例模式是通过编译器来限定唯一性的。 构造函数私有，构造对象为static类型，只能有一个。  [/quote] 说的不全或者有问题的地方，请指正。[/quote]  http://blog.csdn.net/wangyaninglm/article/details/78658318  找到一些资料，未完待续

user: user-1
content: 引用 13 楼 zjq9931 的回复:[quote=引用 12 楼 wangyaninglm 的回复:] 全局唯一id和单例模式的区别联系是啥？ 全局唯一Id和单例模式的相同点：全局只操作一个实例。 全局唯一Id是全局可见的，任意一个地方都可以修改。单利模式不是全局可见，要想操作必须先通过获取语句来获取。 多线程的时候同步封装，单例模式相对的比较容易实现封装。 全局唯一Id只能通过制度来规定唯一性，不能通过编译器来限定唯一性。单例模式是通过编译器来限定唯一性的。 构造函数私有，构造对象为static类型，只能有一个。  [/quote] 说的不全或者有问题的地方，请指正。

user: user-1
content: 引用 12 楼 wangyaninglm 的回复:全局唯一id和单例模式的区别联系是啥？ 全局唯一Id和单例模式的相同点：全局只操作一个实例。 全局唯一Id是全局可见的，任意一个地方都可以修改。单利模式不是全局可见，要想操作必须先通过获取语句来获取。 多线程的时候同步封装，单例模式相对的比较容易实现封装。 全局唯一Id只能通过制度来规定唯一性，不能通过编译器来限定唯一性。单例模式是通过编译器来限定唯一性的。 构造函数私有，构造对象为static类型，只能有一个。

user: user-2
content: 离开操作系统，不要谈单例模式。 《Windows核心编程》

user: user-3
content: 没怎么研究过单例模式，可以参考一下别人的：  http://cantellow.iteye.com/blog/838473 https://baike.baidu.com/item/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/5946627?fr=aladdin http://blog.chinaunix.net/uid-22291256-id-3486413.html

user: user-1
content: 引用 8 楼 zjq9931 的回复:引用 4 楼 wangyaninglm 的回复:c里面搞出个单例，干什么用呢？ 单例模式，我个人认为就是全局变量的一种优雅的实现方式。 可以通过一个函数获取到一个实例的指针，或者引用。[/quote] 当然我说的很片面，单例模式有很多全局变量所没有的优点，比如封装同步等等很多优点。 https://www.cnblogs.com/xiangshancuizhu/archive/2012/11/03/2752156.html http://blog.csdn.net/ozdazm/article/details/8538014

user: user-1
content: 引用 4 楼 wangyaninglm 的回复:c里面搞出个单例，干什么用呢？ [/quote] 单例模式，我个人认为就是全局变量的一种优雅的实现方式。 可以通过一个函数获取到一个实例的指针，或者引用。

user: user-0
content: 全局唯一id和单例模式的区别联系是啥？     引用 10 楼 cfjtaishan 的回复:没怎么研究过单例模式，可以参考一下别人的：  http://cantellow.iteye.com/blog/838473 https://baike.baidu.com/item/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/5946627?fr=aladdin http://blog.chinaunix.net/uid-22291256-id-3486413.html 引用 8 楼 zjq9931 的回复:引用 4 楼 wangyaninglm 的回复:c里面搞出个单例，干什么用呢？ 单例模式，我个人认为就是全局变量的一种优雅的实现方式。 可以通过一个函数获取到一个实例的指针，或者引用。[/quote]

user: user-4
content: 看你的问题，让我想起了马大师关于臭虫药的相声

user: user-0
content: 引用 6 楼 hdt 的回复:看你的问题，让我想起了马大师关于臭虫药的相声why

user: user-0
content: 引用 1 楼 user-6 的回复:单例模式是设计模式里的概念，是独立于语言的，很多语言都可以实现单例模式，C语言也可以，只是优雅程度不高 单例模式是限制只生成一个实例，单线程--多线程--分布式是另外的概念  单线程--多线程--分布式 应该有自己对应的单例实现

user: user-0
content: 引用 2 楼 hdt 的回复:c里面搞出个单例，干什么用呢？

user: user-5
content: 看过一个单例模式的写法 核心是使用锁实现多线程同步， 使用barrier()或者volatile，防止编译时内存乱序访问

user: user-4
content: c里面搞出个单例，干什么用呢？

user: user-6
content: 单例模式是设计模式里的概念，是独立于语言的，很多语言都可以实现单例模式，C语言也可以，只是优雅程度不高 单例模式是限制只生成一个实例，单线程--多线程--分布式是另外的概念