Пример #1
0
int ngx_shmap_inc_double(ngx_shm_zone_t* zone, ngx_str_t* key,double d,uint32_t exptime,double* ret)
{
	ngx_int_t rc = 0;
	ngx_str_t data = ngx_null_string;
	assert(zone != NULL);
	assert(key != NULL);
	assert(ret != NULL);
	
	uint8_t value_type = VT_DOUBLE;
	rc = ngx_shmap_get(zone, key, &data, &value_type, NULL,NULL);
	if(rc == 0){
		if(value_type != VT_DOUBLE){
			//NLOG_ERROR("key [%V] value_type [%d] invalid!",key, value_type);
			return -1;
		}
		double* p = (double*)data.data;
		//要改成原子操作
		*ret = (*p += d);
	}else{
		//不存在,插入新的
		ngx_str_set_double(&data, &d);
		rc =ngx_shmap_set(zone, key, &data, value_type, exptime,0);
		if(rc == 0){
			*ret = d;
		}
	}
	return rc;
}
Пример #2
0
void 
ngx_str_handler_set_double(ngx_str_t* key, double* value) {
	ngx_str_set_double(key,value);
}