`
konin
  • 浏览: 10262 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论
文章列表
什么情况下需要用到锁呢,就是多线程在使用同一个资源(变量),比如,在类A中有一个变量int i,A创建了3个线程,i作为变量传递给了这3个线程,每个线程都需要对这i进行修改,那么在使用 i 的时候,这3个线程都需要进行锁操作。   第一步 声明纯虚类: class Lock {public:    /**     * 析构函数     */    virtual ~Lock() {}        /**     * 加锁     */    virtual void acquire() = 0;        /**     * 尝试加锁     * @return 加锁成功则返回tr ...
线程池,首先要明白,线程池是用来管理线程类的,线程类的实现可以参考我前面说过的方法,连接:  http://konin.iteye.com/blog/2333332 既然是管理线程类,就必须要有一个容器(池子)来装这些线程类,同时间,要知道有那些线程类处于运行工作的状态,所以还要有一个容器装运行状态的线程   什么情况下需要用到线程池? 场景1、一个业务,可以通过某种规则,用多个线程来处理,而这些线程可以分别独立处理这个业务而不互相干扰,比如1000万条记录,每条记录的关键字段是数字,数字分别以0到9结尾,那么就可以用10个线程来处理,用一个线程池来管理这10个线程。   实现 ...
1.一般方法     一般情况下,使用线程,是用pthread_create函数创建一个线程,创建的过程中采用传递函数指针的方式来实现主体的业务逻辑。比如 /*thread.c*/  #include <stdio.h>  #include <pthread.h>    /*线程一*/  void thread_1( ...
有些操作系统支持 date  命令直接获取昨天的日期,比如   linux: strdate=`date -1d +"%Y%m%d"`   系统的不同,导致date命令有的支持有的不支持直接获取,这里给一个通用的脚本:   #取昨天的时间month=`date   +%m`day=`date   +%d`year=`date   +%Y` month=`expr   $month   +   0`day=`expr   $day   -   1`if   [   $day   -eq   0   ];   then   month=`expr   $mont ...
1、数字===》string USING_STD(string); USING_STD(vector); USING_STD(istringstream); USING_STD(ostringstream); USING_STD(ends); USING_STD(setbase); USING_STD(pair); USING_STD(numeric_limits);   /** * 将指定数据转化为字符串 * @param t 待转为字符串的数据 * @return 字符串 */template<class T> string str(T t) {   ...
相信做过服务端开发的应该都知道Redis的大名,它是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,我们后台是用C++开发的,问了下他们,用的缓存框架有Redis,SSDB,今天看了几个帖子,简单了解Redis的用法。记录一下过程。 首先去官网下载最新的Redis源码http://redis.io/解压之后,进入目录编译 make make test sudo make install 下载hredishttps://github.com/redis/hiredis解压之后,同样的 make sudo make install ...
Redis协议 *<args><cr><lf> 参数个数 $<len><cr><lf> 第一个参数长度 <arg0><cr><lf> 第一个参数 $<len><cr><lf> 第一个参数长度 <arg1><cr><lf> 第二个参数 ... ...
举例场景:存储游戏玩家的任务数据,游戏服务器启动时将mysql中玩家的数据同步到redis中。 从MySQL中将数据导入到Redis的Hash结构中。当然,最直接的做法就是遍历MySQL数据,一条一条写入到Redis中。这样没什么错,但是速度会非常慢。如果能够想法使得MySQL的查询输出数据直接能够与Redis命令行的输入数据协议相吻合,可以节省很多消耗和缩短时间。 Mysql数据库名称为:GAME_DB, 表结构举例: CREATE TABLE TABLE_MISSION ( playerId int(11) unsigned NOT NULL, missi ...
大约一年多前,公司同事开始使用Redis,不清楚是配置,还是版本的问题,当时的Redis经常在使用一段时间后,连接爆满且不释放。印象中,Redis 2.4.8以下的版本由于设计上的主从库同步问题,就会导致整个问题,不知是否确为这个Bug所致。但从那以后,我就很少敢去尝试使用Redis。曾想转投MongoDB,但公司同事给我的回复是,由于MongoDB宕机,数据丢失,公司损失惨重。于是,我一直停留在Memcached使用范畴,且用的还比较一般。 相关链接: Redis实战 Redis实战之Redis + Jedis Redis实战之征服 Redis + Jedis + Spring (一 ...
  用Memcached,对于缓存对象大小有要求,单个对象不得大于1MB,且不支持复杂的数据类型,譬如SET 等。基于这些限制,有必要考虑Redis! 相关链接: Redis实战 Redis实战之Redis + Jedis Redis实战之征服 Redis + Jedis + Spring (一) Redis实战之征服 Redis + Jedis + Spring (二) Redis实战之征服 Redis + Jedis + Spring (三)   言归正传,目前Redis大概有3中基于Java语言的Client:?Jredis?Jedis?Redis4J 这里只说Je ...
场景:     linux服务器调用了webservice,等待webservice返回结果字符串A,A是utf编码格式,linux是采用的gbk编码格式,为了显而易见的看见A,需要把A转化为gbk格式进行显示,恰好A 带了bom头,转gbk的时候会失败,被bom给截断。   bom就只有3个字节,放在字符串的开始位置,这3个字节固定为:EF BB BF 可以考虑跳过这3个字节再进行转gbk就会OK。   比如  A为char * string b = A+3; 可以在转之前判断前3个字节,比如 int ia ; memcpy(&ia, A,1);//判断ia是否等 ...
boolUnicode::wstringToString(constwstring&s, string&t) { wchar_twc; for (wstring::size_typei=0;i<s.length();++i) { wc=s[i]; if (wc<0x80) { t+=static_cast<char>(wc); }elseif (wc<0x800) { t+=0xc0| (
boolUnicode::stringToWstring(conststring&s, wstring&t) { t.reserve(t.length() +s.length()); wchar_twc; unsignedintminval; unsignedcharc; string::size_typelen; for (string::size_typei=0;i<s.length();i+=len) { c=s[i]; if

equal_range

这个函数的作用是返回数组中某一个值的起始地址和结束地址,函数的使用前提是数组要排序好。   比如 vector<int> v1   v1.push_back(1)//下标0 v1.push_back(2)//下标1 v1.push_back(3)//下标2 v1.push_back(4)//下标3 v1.push_back(4)//下标4 v1.push_back(4)//下标5 v1.push_back(5)//下标6   pair<vector<int>::iterator ,vector<int>::iterator> ...
1、功能作用      lower_bound 的作用是在已经排好序的数组中返回第一个大于等于(不小于)你所给定的值。      比如,在vector元素中,有1,2,3,4,4,4,5.对应的下标是 0,1,2,3,4,5,6      通过lower_bound 查找4,那么返回的是下标3.     2、使用方法     首先看看lower_bound的函数原型有2个版本。     版本一: template<class ForwardIterator,class T> ForwardIterator lower_bound(ForwardItera ...
Global site tag (gtag.js) - Google Analytics